Efficient way to read JSON file?
我在nodejs中看到了从localy读取JSON文件的不同方法。这样地;
方法
使用fs库
同步
1 2 | var fs = require('fs'); var obj = JSON.parse(fs.readFileSync('file', 'utf8')); |
Async:
1 2 3 4 5 6 | var fs = require('fs'); var obj; fs.readFile('file', 'utf8', function (err, data) { if (err) throw err; obj = JSON.parse(data); }); |
来源:https://stackoverflow.com/a/10011078/7724032
方法
使用要求()
1 | let data = require('/path/file.json'); |
方法
使用Ajax请求如何使用jquery和ajax从json文件中检索数据?
可能还有其他的方法。但我听说使用方法1读取JSON文件比其他方法更有效。
我正在开发一个模块,在这个模块中,当每个客户端请求时,我必须读取一个JSON文件,而我当前使用的是方法1。这是银行应用程序,性能很重要。那么,帮我找出使用这个塞那里奥的好方法?
谢谢,任何帮助都将不胜感激!
方法3)不需要考虑,因为它将其他方法之一与网络请求结合在一起,因此您仍然需要选择其他方法之一。
我假设方法2)正在泄漏内存。如果您需要两次,nodejs将通过引用返回完全相同的内容:
1 | require("thing") === require("thing") |
因此,如果你只需要一次,它就会永远留在记忆中。如果您多次查找它,这会很快,但是如果您有很多文件,它会填满内存。
现在只剩下方法1),在这里我将使用异步版本,因为它可以并行执行多个请求,如果您的服务器处于负载下,这将优于同步方法。
我个人会选择第4个选项:
将其存储在数据库中。数据库将数据加载到内存中以便更快地访问,并且它们是为处理大量文件而构建的。在处理JSON时,MongoDB是一个不错的选择:
1 2 3 4 5 | const db = mongodb.collection("json"); function getFile() { return db.findOne({"name":"test" }); } |
所以我创建了一个大的JSON文件,并测量了时间,看看哪个文件更快,创建该文件的代码在末尾,并进行了注释。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | const fs = require('fs') // method 1 - sync console.time('method_1_sync ') var obj = JSON.parse(fs.readFileSync('file.json', 'utf8')) console.log(obj[1000] === 2000) console.timeEnd('method_1_sync ') // method 2 console.time('method_2 ') let data = require('./file.json') console.log(data[1000] === 2000) console.timeEnd('method_2 ') // method 1 - aysnc console.time('method_1_async') fs.readFile('file.json', 'utf8', function (err, data) { if (err) throw err data = JSON.parse(data) console.log(data[1000] === 2000) console.timeEnd('method_1_async') }) /* var obj = {} for (i=0; i < 1000000; i++){ obj[i] = i+i } var json = JSON.stringify(obj) fs.writeFile('file.json', json, function() {}) */ |
这是我机器上的结果:
1 2 3 | method_1_sync : 131.861ms method_2 : 131.510ms method_1_async: 130.521ms |