如果我在项目中使用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是异步
答案 0 :(得分:4)
两个主要区别:
/**
* Checks if value is empty. Deep-checks arrays and objects
* Note: isEmpty([]) == true, isEmpty({}) == true, isEmpty([{0:false},"",0]) == true, isEmpty({0:1}) == false
* @param value
* @returns {boolean}
*/
function isEmpty(value){
var isEmptyObject = function(a) {
if (typeof a.length === 'undefined') { // it's an Object, not an Array
var hasNonempty = Object.keys(a).some(function nonEmpty(element){
return !isEmpty(a[element]);
});
return hasNonempty ? false : isEmptyObject(Object.keys(a));
}
return !a.some(function nonEmpty(element) { // check if array is really not empty as JS thinks
return !isEmpty(element); // at least one element should be non-empty
});
};
return (
value == false
|| typeof value === 'undefined'
|| value == null
|| (typeof value === 'object' && isEmptyObject(value))
);
}
缓存结果,因此在使用require()
的JSON的后续读取中将看不到对.json文件的更改,除非从require缓存中显式删除了结果。
require()
是同步的,require()
是异步的。当然,如果你想要同步行为(但不确定原因),你可以使用fs.readFile()
。
除了那些,你可以按照你想要的方式做到。
fs.readFileSync()
。fs.readFile()
。require()
来保留服务器的异步响应。fs.readFile()
因为它只是更少的代码,并且是node.js内置的行为。