【问题标题】:Application bloat by using third parties library in NPM & Javascript [closed]在 NPM 和 Javascript 中使用第三方库导致应用程序膨胀 [关闭]
【发布时间】:2017-06-10 16:06:05
【问题描述】:

我正在和朋友一起做一个项目。

到目前为止,他是一个比我更好的程序员,因为我已经编程了一年多一点。

我注意到他经常从头开始构建组件和功能。在从头开始构建功能方面,我认为他几乎是一个“潮人”。

我使用 npm 库等的方法有什么缺点吗? IE。日期选择器、地图组件等?

我可能会想到的一个原因是性能可能会受到影响。加载时间会受到显着影响吗?我不是在构建一个大型应用程序,实际上我认为它很小,但是!我想知道我是不是在“作弊”,或者这会导致臃肿。

作为一个快速预览,我的基本功能目前看起来包括:

  • 表情符号选择器
  • 日期选择器
  • Google Maps API 地图组件和地点
  • 表单验证库
  • 超级代理
  • Moment.js

【问题讨论】:

  • 这个问题对于 SO 来说可能“太宽泛”了——但是给你我的 2c。这是情景。如果一个库维护得很好,它的编码可能会比你在几个小时内自己组装的东西要好。但是,如果您没有利用该库的全部实用程序,您可能会浪费捆绑包中的空间。例如 - 如果您从 Moment.js 导入所有语言环境并使用其中的 2 个,那就不好了。
  • (ctd) 如果库可以节省您的时间,请不要害怕使用它们,但请注意您要添加到最终捆绑包中的大小,并根据节省的时间与性能做出决定。您可以使用各种工具来分析每个依赖项占用的空间。
  • 您的朋友患有“这里没有发明综合症”。过度使用外部库当然是可能的;最好确保您不会为了使用其中的一小部分而引入冗余功能或引入整个库。但总的来说,库代码会比你自己的代码更久经考验和强化,这仅仅是因为更多的人使用它。
  • (我同意这个问题可能会以“主要基于意见”的方式结束,但我忍不住提出我的意见)
  • 不!非常感谢你们! (我确实环顾四周,发现没有任何类似的问题,但我确实认为它可能对其他程序员有用)。感谢您的洞察力!

标签: javascript node.js reactjs npm


【解决方案1】:

首先你没有作弊。
开发人员使用第三方软件包很常见。
但学习构建自己的组件可能是很好的体验。
不要忘记,随着您的经验和知识的增长,您可以随时更换它们

优点

  • 它们可以节省您的开发时间。
  • 他们可以做您可能觉得难以实施的事情。
  • 可以更好地编写和测试它们。

缺点。

  • 它们可能写得不好、不可靠、不受支持。
  • 如果您不知道它们是如何工作的,如果存在错误或需要扩展功能,则可能会出现问题。
  • 您最终可能会包含很多未使用的脚本。
  • 您也许可以写出更好、更易于维护的东西。

使用汇总等工具捆绑、缩小、丑化您的 JavaScript 和摇树可以帮助减少下载大小。

如果您使用软件包,请使用可靠的软件包,查看评论和评级,查看活动和问题日志。

与所有与性能相关的问题一样 - 测试。
使用 fiddler 或 chrome 查看您的下载量,测量您的下载时间。
尽可能在真实的设备/网络/负载条件下进行测试。

【讨论】:

  • 太棒了!我将查找有关如何减小包大小的更有针对性的信息:“使用汇总等工具捆绑、缩小、丑化 JavaScript 和摇树可以帮助减小下载大小。”
【解决方案2】:

这是一个很好的知识测试,因为你是新手,尝试自己写所有这些东西。这就是大部分 stackoverflow 用户的学习方式:承担一个听起来可行的项目,但当时有一个未知的部分。这就是我个人了解我所知道的一切的方式。

话虽如此,我不认为这是作弊。英语中有一句常用短语:“不要重新发明轮子”。这些库存在的原因是有人花了很多时间来制作它们,然后意识到其他人也可能从中受益。以 Moment 为例,在任何语言中使用日期/时间都是一种巨大的痛苦,而 Moment 如此受欢迎的原因是因为没有人愿意经历 Moment 的创建者已经经历的所有事情。为什么要浪费时间重新发明一个非常好的、经过充分测试且可靠的轮子?

现在,如果你说“伙计,这个轮子不错,但如果它们是用更耐用的东西制成的,这样它们可以克服更多的颠簸,那不是更好吗?”那么在这种情况下,您正在改进轮子——同样有许多项目是从现有项目的一个分支开始的,希望添加作者认为缺少的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2012-05-25
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多