我目前正在使用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如何加载它的模块。如果按需要加载,那么这个实现肯定会减慢它的速度吗?
答案 0 :(得分:4)
所需的模块只加载一次,然后加载cached,所以请随意将您的应用分解为所需数量的模块,以便干净地整理您的应用。如果您有20个调用require('mongoskin')
的文件,则该模块仍然只加载一次。
答案 1 :(得分:2)
从node.js documentation引用:
模块在第一次加载后缓存。这意味着 (除此之外)每次调用require('foo')都会得到 返回完全相同的对象,如果它将解析为相同 文件。
多次调用require('foo')可能不会导致模块代码 多次执行。这是一个重要的特征。用它, 可以返回“部分完成”的对象,从而允许传递 即使它们会导致循环,也要加载依赖项。