[英]Why use readFileAsync to read file with json inside in Node.js?
我正在学习 Node.js 并正在观看 Node.js 课程,其中作者使用了以下代码:
const tours = JSON.parse(fs.readFileSync('data.json'));
app.get('/api/v1/tours', (req, res)=>{
res.status(200).json({tours.tours})
}))
如上代码所示,我们首先尝试通过同步读取文件来解析json。 作者说如果我们使用const tours = JSON.parse(fs.readFileSync('data.json'));
在 get() 的回调中,事件循环将被阻塞,因为回调是由事件循环执行的。 但由于作者提出
const tours = `JSON.parse(fs.readFileSync('data.json'));`
在回调之外,该代码将被视为不被事件循环执行的顶级代码。 有点令人困惑的是,由于const tours = JSON.parse(fs.readFileSync('data.json'));
是顶层代码,作者说用同步版本的readFile就可以了。 我认为同步 readFile 最好避免被使用,因为它是阻塞的。 即使使用 readFileSync 同步顶级代码也不会阻塞是真的,还是作者使用 readFileSync 作为顶级代码是错误的?
Node.js 中的每个代码都在事件循环中运行。 顶级代码也是如此,因此事件循环将被阻塞。 没有什么变化。 可以在顶层执行此操作的原因是,在初始代码运行期间,代码仅被阻塞一次。 在.get()
内部,您将在每个请求期间阻止整个应用程序。 那将是一场灾难。
话虽如此,代码给人的印象是你不应该担心在顶层阻塞。 这是错误的。 它会增加您的应用程序启动时间。 如果你堆叠了很多这样的调用,你会在启动过程中看到明显的延迟。 经验法则是:无论如何,始终避免在 Node.js 中进行同步 I/O。
IMO 课程存在严重缺陷。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.