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

Šim*_*das 2 javascript node.js express

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

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

此代码在初始化期间运行(即每当我的节点应用程序(重新)启动时).我想知道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;
});
Run Code Online (Sandbox Code Playgroud)

dje*_*lin 5

在长时间运行的程序中,在启动时执行同步请求很好.同步请求的问题是它将阻止整个应用程序.虽然如果他们不得不等待额外0.1秒的响应,您的个人请求将会受到影响,但如果启动时需要额外的0.1秒,您的整个应用程序几乎肯定不会受到影响.(我假设你的档案不是"巨大的").

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

readFileAsync(file, function() {
    startListeningForRequests();
}
Run Code Online (Sandbox Code Playgroud)

然后它相当于读取同步.但是,如果您需要在启动时读取1000个文件,则异步版本可能更易于维护 - 您当然希望并行执行此操作.但在我作为网络开发人员的实际经验中,这不太可能,所以同步很好.