我有条件地将一些静态 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/