在各个函数中使用require node.js模块对全局性能的影响

时间:2015-11-22 08:44:55

标签: javascript node.js performance

我有一个包含多个函数的node.js文件。假设每个函数都需要下划线模块。在每个函数中添加var underS = require("underscore");与在顶部全局声明单个var underS = require("underscore");相比,对性能的影响是什么?哪个是更好的表现?

2 个答案:

答案 0 :(得分:2)

我只是想在一个精确的答案之上添加一个广义的答案。

永远不要让性能影响您的代码库的广泛组织,除非您真的有一个好的(有计划的)理由不这样做。

"测量"在这种情况下,并不意味着一些微观基准。它意味着在您的实际项目的上下文中进行分析。

在我的职业生涯早期忽略这条规则让我很难受。它并没有帮助我编写高效的代码,它只是通过使我的代码库难以维护而很难将生产力降低到最低限度,并且很难爱上(我认为通常忽略了提升的人类素质)。

所以在" no"之上,你不应该担心导入模块的性能,我会更强烈地建议,"没有",你不应该" 39,无论如何都要担心它,即使它确实影响了性能。

如果要设计性能,性能关键的循环代码往往只占代码库的一小部分。很容易将其视为一堆积累产生瓶颈的微不足道的低效率,但养成剖析的习惯将很快消除这种迷信。在代码库的那个小小部分中,您可能会非常精细,甚至可能在本机代码中实现其中的一部分。在那里,对于代码库的这个小小的部分,您可能会研究计算机体系结构,面向缓存局部性的数据导向设计,SIMD等。您可以非常精细地优化实际构成分析热点的一小部分代码。

但计算速度的关键在于您首先通过缩小并专注于更重要的优先级来有效地生成和维护代码。那是什么让你有时间放大那些实际上构成测量热点的小部件,并为你提供时间来根据需要优化它们。首先是生产力,这来自于一个在竞争性能通常是所追求的品质(网格处理,光线追踪,图像处理等)之一的领域工作。

答案 1 :(得分:1)

  

模块在第一次加载后进行缓存。这意味着(除其他外)每次调用require(' foo')将获得完全相同的返回对象,如果它将解析为同一文件。

所以基本上没有,它不会影响性能。