Javascript 我如何诊断和修复我荒谬的长流星构建时间?

Javascript 我如何诊断和修复我荒谬的长流星构建时间?,javascript,node.js,meteor,npm,Javascript,Node.js,Meteor,Npm,我有一个使用meteor 1.5、react和redux的中小型web应用程序。很长一段时间以来,我一直在经历大约3-4分钟的可怕启动时间。我的应用程序使用npm软件包、meteor软件包和本地meteor软件包。我能够删除一堆不需要的本地包,我把构建时间缩短到了2分钟以上,但这并没有持续多久,现在几乎要20分钟 我已经试过多次使用meteor profiler,虽然它报告的时间本身仍然不可接受,但比实际加载时间短得多。等待的大部分时间介于“prepareProjectForBuild”步骤的完

我有一个使用meteor 1.5、react和redux的中小型web应用程序。很长一段时间以来,我一直在经历大约3-4分钟的可怕启动时间。我的应用程序使用npm软件包、meteor软件包和本地meteor软件包。我能够删除一堆不需要的本地包,我把构建时间缩短到了2分钟以上,但这并没有持续多久,现在几乎要20分钟


我已经试过多次使用meteor profiler,虽然它报告的时间本身仍然不可接受,但比实际加载时间短得多。等待的大部分时间介于“prepareProjectForBuild”步骤的完成和“Build App”步骤的开始之间,此时探查器不输出任何内容。当“构建应用程序”步骤完成时,据称需要大约200秒。在我看来,这仍然是一个糟糕的构建时间,但我愿意为此付出代价

我有一个类似规模的项目,将构建时间压缩到1分钟左右。根据我的经验,我只能告诉你我是如何缩短构建时间的:

A-代码注意事项

1。将尽可能多的“手动”代码移到工厂方法中

这意味着,重复次数很多的类似创造性代码可以很容易地简化为几个创造性工厂函数。这也提高了测试覆盖率

其中:

  • 特别是收藏品的创作。大多数藏品只是不同而已 在他们的模式和pub/methods的一些特例中。很多代码 这是重复的
  • 模式
  • 常见出版物(例如,仅标题和id,经常出现)
  • 遵循某种“标准”模式的方法
  • 运行时创建的对象的任何重复模式
2。不要乱搞成千上万的循环进口商品

它不会使你的应用程序崩溃。但是保持清晰和封装的结构可能会减少导入的查找时间。使代码更易于维护

3。将资产文件移出项目

我知道这是一个困难的问题,特别是当结构随着时间的推移而收紧时。但是,当我不得不将所有资产文件移到cdn中,并且只引用路径时,它大大加快了我的构建时间

4。包中的Npm依赖关系

您可以使用

tmeasday:check-npm-versions
软引用它们,以便您的meteor应用程序负责管理它们,减少npm重复数据包的冲动

5。尽可能转移到npm

不管怎样,流星将转移到npm的时刻终将到来。因此,在可能的情况下,现在就让您的包成为npm包,并确保以后的构建时间安全

编辑:

6。将应用程序中的服务提取到独立服务中

当你有只提供一种功能的服务时,把它们移出你的应用程序。这可能适用于:

  • 通知服务
  • 引擎(工作流、流程补充)
  • 记录/跟踪
  • 简单交易
  • 管理面板(通常只是操作集合)
  • 应用程序的其他部分,仅用于管理目的

B-其他注意事项

1。不要在Windows上开发meteor(除非您需要)

这个建议有点缺陷,因为我无法告诉您原因,但我在几台机器(我自己的、虚拟机、同事、工作场所)上发现,更新、构建和包构建过程比在linux或mac上慢。编译像bcrypt这样的本机代码在这里非常慢。也许有人对此有所了解

2。SSD让一切变得更快

已经有常识了


注意:我不知道这些方法中的一种有多好。随着时间的推移,我尝试了所有这些,并获得了良好的构建。

切换到另一个框架。长时间的构建不会消失我知道Meteor不是理想的选择,但我现在有点被它卡住了。20分钟的构建时间显然是病态的。谢谢你的提示!不幸的是,这一定是流星号的问题。我删除了我所有的meteor文件,开始了一个新项目,现在一切都运行得很好