使用 require 与使用 fs.readFile 从文件中获取 JSON 的优点和缺点是什么

Jak*_*ake 3 node.js

如果我在项目中使用 JSON 数据,最好使用 readFile,如下所示:

var fs = require('fs');
var obj;
fs.readFile('file', 'utf8', function (err, data) {
  if (err) throw err;
  obj = JSON.parse(data);
});
Run Code Online (Sandbox Code Playgroud)

或者只使用 require

var config = require('./file.json');
Run Code Online (Sandbox Code Playgroud)

我尝试过寻找性能比较,但找不到任何结果。在FredKSchott 的这篇文章中,作者深入研究了 require 函数,看起来它可以通过缓存提高性能,但它看起来是同步的,而 fs.readFile 是异步的

jfr*_*d00 5

两个主要区别:

  1. require()缓存结果,因此在后续读取 JSON 时不会看到对 .json 文件的更改,require()除非显式从 require 缓存中删除结果。

  2. require()是同步的,fs.readFile()是异步的。当然,fs.readFileSync()如果您想要同步行为,您可以使用(但不确定为什么)。

除此之外,您可以按照自己想要的方式进行操作。

  • 如果缓存是一个问题(例如您不想缓存),那么我会使用fs.readFile().
  • 如果缓存有好处,那么我会使用require().
  • 如果我明确想要异步行为,因为这不是在启动时完成的,而是在请求处理程序中完成的,那么我会使用fs.readFile()保留服务器的异步响应能力。
  • 除了这两个之外,如果此代码在启动时运行,我会使用require(),因为它只是更少的代码,并且是内置于 Node.js 中的行为。