繁体   English   中英

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

[英]Is readFileSync() during initialization of a Node.js web app a bad approach?

我有条件地在我的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');

此代码在初始化期间运行(即每当我的节点应用程序(重新)启动时)。 我想知道在这种情况下使用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个文件,则异步版本可能更易于维护 - 您当然希望并行执行此操作。 但在我作为网络开发人员的实际经验中,这不太可能,所以同步很好。

在服务器开始监听之前执行同步任务很好,因为您此时并未阻止请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM