Node.js模块加载

时间:2013-01-30 14:54:48

标签: javascript jquery node.js

我目前正在使用Node构建一个Web应用程序,我很好奇Node如何加载所需的文件或模块。

我正在使用express for view和server config,但是我发现所有的Node示例(我知道express提供了一个MVC示例)并不真正符合一般的MVC模式。我也知道Node并不一定适合MVC,但请耐心等待,因为我喜欢MVC。

如果考虑以下路由声明,将其用作控制器是有效的,因为在这里您可以控制请求和响应逻辑:

module.exports = function (app) {

app.get('/', function (req, res) {

    res.render('index', { layout: false });


});

为了尝试遵循MVC架构,我已经有效地将路由划分为相关路径,从而创建控制器。但是,每当我有一个不同的路由文件时,它必须包含自己的一组必需模块。例如:

var mongo = require('mongoskin');

然后我会在包含服务器配置设置的app.js或server.js文件中声明所需的路由文件。

我想知道是否拆分这样的路由会降低应用程序的速度,因为我不知道Node如何加载它的模块。如果按需要加载,那么这个实现肯定会减慢它的速度吗?

2 个答案:

答案 0 :(得分:4)

所需的模块只加载一次,然后加载cached,所以请随意将您的应用分解为所需数量的模块,以便干净地整理您的应用。如果您有20个调用require('mongoskin')的文件,则该模块仍然只加载一次。

答案 1 :(得分:2)

从node.js documentation引用:

  

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

     

多次调用require('foo')可能不会导致模块代码   多次执行。这是一个重要的特征。用它,   可以返回“部分完成”的对象,从而允许传递   即使它们会导致循环,也要加载依赖项。