在nodejs中使用全局变量有多糟糕?

时间:2015-05-14 19:33:29

标签: node.js

我需要库(mongo,async ...)和几乎我代码中的每个文件中的一些核心功能。据我所知,加载模块是一个昂贵的过程。另外,在每个文件中编写更多代码行是一件痛苦的事。

当应用程序启动时,要求它一次是否更聪明?

我知道全局变量一般都很糟糕,但在这种情况下有多糟糕?

2 个答案:

答案 0 :(得分:4)

使用全局变量总是一个BAD(故意大写)的想法,所以你应该留意另一个解决方案。

由于模块在加载时会被缓存,因此它们并不太昂贵。无论你做过一次还是多次都没关系。

所以最简单的方法就是require模块到处都需要它。

现在,有时模块需要一些配置。然后,您需要确保在第一次加载模块时完成此操作。为此,创建一个这样的包装器模块:

var foo = require('foo');

foo.configure(options);
// Or do whatever you need to do here to configure foo.

module.exports = foo;

现在您可以像这样使用它:

var configuredFoo = require('./configuredFoo');

这应该可以解决问题。

答案 1 :(得分:0)

首次加载模块有点昂贵(虽然它只发生在服务器启动时,通常是从本地硬盘驱动器加载,而不是通过网络加载)。但是,在它被加载一次之后,它被node.js缓存,并且对同一模块的后续require()调用只是非常快速地返回完全相同的模块而不进行任何额外的加载。

因此,让多个模块通过require()共享相同的子模块是一种有效且有意的方式来设计node.js代码而不使用单个全局变量。