javascript - Node.js Web 应用程序初始化期间的 readFileSync() 是一种糟糕的方法吗?

标签 javascript node.js express

我有条件地将一些静态 HTML 片段文件包含在我的 Node 应用程序所服务的网页中。我正在考虑为这些片段创建一个缓存映射,我会将其包含在我的 Express 的 app.js 文件的顶部:

var cache = Object.create(null);
cache['404'] = fs.readFileSync('path/to/404.html');
cache['weekend'] = fs.readFileSync('path/to/weekend.html');

此代码在初始化期间运行(即每当我的 Node 应用程序(重新)启动时)。我想知道在这种情况下使用 readFileSync() 是否是一种糟糕的方法。


为了比较,类似的异步方法:

var cache = Object.create(null);
fs.readFile('path/to/404.html', function (err, data) {
    cache['404'] = data;
});
fs.readFile('path/to/weekend.html', function (err, data) {
    cache['weekend'] = data;
});

最佳答案

在长时间运行的程序中,在启动时执行同步请求是可以的。同步请求的问题在于它会阻塞整个 应用程序。如果您的单个请求必须额外等待 0.1 秒才能得到响应,那么它们将受到影响,但如果需要额外的 0.1 秒来启动,您的整个应用程序几乎肯定不会受到影响。 (我假设您的文件不是“巨大的”)。

换句话说:异步的唯一好处是在 IO 阻塞调用发生时可能会发生其他事情。如果这是您的整个程序:

readFileAsync(file, function() {
    startListeningForRequests();
}

那么就相当于阅读同步了。但是,如果您需要在启动时读取 1000 个文件,则异步版本可能更易于维护——您当然希望它并行发生。但根据我作为 Web 开发人员的实践经验,这不太可能,所以同步很好。

关于javascript - Node.js Web 应用程序初始化期间的 readFileSync() 是一种糟糕的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23182629/

相关文章:

node.js - 调试不是可识别的命令(快速)

javascript - 数组的许多特定对象属性

javascript - 有没有办法从数组中提取对象并放入新数组中?

Node.js 和 underscore.js -- 模板化

node.js - 将 Visual Studio 调试器附加到 Electron 应用程序

mysql - Sequelize 等效范围

node.js - 使用两个不同异步函数的结果

javascript - AJAX 应用程序和事件监听器的 JS 内存泄漏?

javascript - 引导模式 : is not a function

javascript - 如何在线发布 Node.js 服务器,以便外部应用程序始终可以访问它