如果我通过一个variables太多require()会发生什么?
我在我的NodeJS文件夹中传递players
variables3个级别。
第一个文件是server.js,它们有
var players = {}; require('./routines')(players);
在例程文件夹内,这是index.js:
module.exports = function (players) { var addHp = require('./addHp')(players); }
在addHp.js里面:
module.exports = function (players) { var addHp = setInterval ( function () { for (var player in players) { //... } }, 30000); }
我想知道这样做的performance是什么。 players
参考仅在服务器初始化时发送? 是否有太多参考文献的缺点? 除了不好的做法,假设我有100个要求内线要求接players
,我会有问题吗?
从性能angular度来看,这真的不应该是一个问题。 这不是我们正在执行循环中requires
一百万次。 甚至一个已经加载的模块的require
在查找成本的情况下可能是昂贵的,但是它必须在一些密集的循环中才能成为一个问题。
此外,关于通过参考这个players
反对三个函数调用,它实际上可能比有一些全球性的便宜。 与普遍的看法相反,把一个更多的全局variables的内容复制到本地范围通常是比全局variables便宜或者便宜的(假设副本是便宜的,这可以作为参考)。 这是因为从编译器的angular度来看,像这样的东西:
module.exports = function (players) { var addHp = require('./addHp')(players); }
…它可以假定这个players
参数(本地函数)在此期间不会引用其他任何东西,因为它只能在函数内部看到它在此期间不会被分配给其他任何东西。
因此,编译器可以更容易地应用优化,在该优化中,可以将该players
引用一次移动到寄存器中,并将其保存在那里,而不必每次在该函数内访问时从较慢的内存forms重新加载它。 当然,即使players
是全球性的,一个非常积极的优化者仍然可以避免,但是做出这样的假设更加困难,并且应该可以安全地说,这里的参考文献的本地副本将会更快或更快。