尽可能快地执行代码

时间:2017-07-24 23:38:04

标签: json node.js

我在我的WebStorm IDE中使用node.js来解析一个大的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);
    }
}

});

我应该如何执行我的代码以尽快获取数据?

1 个答案:

答案 0 :(得分:4)

每次迭代都在运行JSON.parse(data),这可能需要相当长的时间才能生成500MB的json文件。

解决方案是将其移出循环并重用已解析的对象:

var obj = JSON.parse(data);
for (...