1
我使用node.js和我的WebStorm IDE来解析一个大的JSON文件(〜500兆字节)。这里是我的代码:尽可能快地执行代码
fs = require("fs");
fs.readFile('C:/Users/.../Documents/AAPL.json', 'utf8', function (err,data) {
for (i = 0; i < 1000; i++) {
var hex = JSON.parse(data)[i]._source.layers.data["data.data"];
var askPrice = parseInt(hex.substring(215, 239).split(":").reverse().join(""),16);
var bidPrice = parseInt(hex.substring(192, 215).split(":").reverse().join(""),16);
var symbol = hex.substring(156, 179);
var timestamp = hex.substring(132, 155);
var askSize = hex.substring(240, 251);
var bidSize = hex.substring(180, 191);
var price = String((+bidPrice+askPrice)/2);
var realprice = price.slice(0, price.length - 4) + "." + price.slice(price.length - 4);
function hex2a(hexx) {
var hex = hexx.toString();
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
if(JSON.parse(data)[i]._source.layers.data["data.len"] == 84 && realprice.length == 8 && +realprice <154 && +realprice >145) {
console.log(i + " " + hex2a(symbol.replace(/:/g, "")) + " sold for " + realprice + " at " + parseInt(timestamp.split(":").reverse().join(""), 16));
}
}
});
我遇到然而,问题是,我的IDE以非常缓慢的速度第二解析该文件,大约1迭代。我不认为这是因为我的计算机很慢,因为我有一个核心i7 7700k和gtx 1070的高端钻机。我尝试在控制台中执行代码,结果相同。我试着修剪下来的代码,并再次实现了我同样的速度:
fs = require("fs");
fs.readFile('C:/Users/Brandt Winkler Prins/Documents/AAPL.json', 'utf8', function (err,data) {
for (i = 0; i < 12000; i++) {
var hex = JSON.parse(data)[i]._source.layers.data["data.data"];
var askPrice = parseInt(hex.substring(215, 239).split(":").reverse().join(""),16);
var bidPrice = parseInt(hex.substring(192, 215).split(":").reverse().join(""),16);
var price = String((+bidPrice+askPrice)/2);
var realprice = price.slice(0, price.length - 4) + "." + price.slice(price.length - 4);
if(+realprice <154 && +realprice >145) {
console.log(realprice);
}
}
});
我应该如何执行我的代码,让我的数据尽可能快的?
你真的需要重新解析'JSON.parse(数据)'文件每次迭代?并做两次。 – zerkms
这就是答案!我这样做了,它在一秒钟内执行了12000次迭代!很棒,谢谢。 – BWP
如果json是静态的,你可以只需要它:var obj = require('path/to/json')。为您节省异步回调 – Denis