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

标签 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);
});

或者只使用 require

var config = require('./file.json');

我曾尝试查找性能比较,但找不到。在这个post by FredKSchott作者深入研究了 require 函数,看起来它可以通过缓存提高性能,但它看起来是同步的,而 fs.readFile 是异步

最佳答案

两个主要区别:

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

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

除此之外,您可以随心所欲地进行。

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

关于node.js - 使用 require 与使用 fs.readFile 从文件中获取 JSON 的优缺点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32726562/

相关文章:

javascript - Passport.js 回调总是出错

node.js - 使用源映射显示错误(typescript + node/express)

javascript - 模块.exports : is not a function

javascript - async/await 捕获被拒绝的 Promise

node.js - 聊天应用程序的结构和所需的技术

mysql - 使用 NodeJS 和 KnexJS 同步 MySQL 查询

node.js - 主机 header 可以像 Apache 中那样解析为虚拟主机 node.js 吗?

node.js - 无法使用 MEAN 堆栈连接到 Mongodb.atlas 集群

node.js - 如何将 "binary"编码字符串解码为原始二进制缓冲区?

javascript - 无法通过 npm 脚本运行 babel "babel: command not found"