require node.js模块在单个函数中与全局函数中对性能的影响

Impact on performance with require node.js module in individual functions versus globally

本文关键字:函数 全局 性能 影响 node 模块 单个 require js      更新时间:2023-09-26

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

模块在第一次加载后被缓存。这意味着(除其他外)如果需要('fo')的每个调用都将解析为相同的文件,那么它将返回完全相同的对象。

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

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

永远不要让性能影响代码库的广泛组织,除非你有充分的(经过衡量的)理由不这样做。

在这种情况下,"测量"并不意味着某种微观基准。它意味着在实际项目的上下文中进行描述。

在我职业生涯的早期忽视这条规则让我很难过。它并没有帮助我编写高效的代码,它只是使我的代码库难以维护,也难以爱上,从而将生产力降至最低(我认为这是一种激励人的品质,但却经常被忽视)。

所以,除了"不"之外,你不应该担心导入模块的性能,我更强烈地建议,"不",你无论如何都不应该担心,即使它确实影响了性能。

如果你想设计性能,性能关键的循环代码往往只占代码库的一小部分。人们很容易认为这是一堆效率低下的小问题,积累起来会产生瓶颈,但养成分析的习惯会很快消除这种迷信。在代码库的这一小部分中,您可能会非常详细,甚至可能在本机代码中实现其中的一些。在那里,对于代码库的这一小部分,你可能会研究计算机体系结构、缓存位置的面向数据的设计、SIMD等。你可以非常精细地优化这一小段代码,这实际上构成了一个分析热点。

但计算速度的关键首先是你自己的开发人员通过缩小并专注于更重要的优先级来高效地生成和维护代码的速度。这为你争取了时间来放大那些实际上构成测量热点的小部分,并为你提供了时间来尽可能多地优化它们。首先也是最重要的是生产力,这来自于一个在竞争性能通常是追求品质之一的领域工作的人(网格处理、光线跟踪、图像处理等)。