Node.js - process.nextTick和parseJSON

时间:2015-05-22 18:52:07

标签: json node.js performance parsing event-loop

什么是在Node.js中解析JSON最高效的方法?

使用process.nextTick的优点是什么,并且稍微延迟了以下代码段中的答案,并且不应该将整个try / catch封装到process.nextTick中?

function parseJSON(json, done) {
     try {
         var result = JSON.parse(json);
         process.nextTick(function() { done(null, result); });
     } catch (err) {
         process.nextTick(function() { done(err); });
     }
}

3 个答案:

答案 0 :(得分:2)

首先,因为JSON.parse是同步的,所以使用回调没有意义。

这两个代码块基本上做同样的事情。最低效的是:

parseJSON(json, function(err, result) {
    if (err) {
        //ERROR
    }
    else {
        //PARSED
    }
});

VS

try {
    var result = JSON.parse(json);
    //PARSED
}
catch (e) {
    //ERROR
}

现在回答你的实际问题:

  

使用process.nextTick ...

的优点是什么?

基本上没有"优势"除非你不使用process.nextTick,否则你的函数调用会变得更加同步。以这个例子为例:

console.log('1');
parseJSON(json, function(err, result) {
    console.log('parsed');
});
console.log('2');

使用process.nextTick时,您将获得此输出:

1
2
parsed

这是因为process.nextTick将回调函数放在事件循环的末尾。意味着它首先让其他事情发生,然后执行回调。

如果您没有使用process.nextTick,那么您将获得此输出:

1
parsed
2

这是因为parseJSON在调用回调之前不会退出。

这两个版本都是有效的,但是通过回调,您通常希望它们真正异步。

至于try-catch,如果您正试图捕捉来自JSON.parse的错误,它就会很好。由于您似乎想要处理错误(因为如果它引发异常,您将错误参数传递给回调),那么我说它是正确的。

答案 1 :(得分:0)

首先 。 process.nextick是async ...尝试catch可能无法正常工作.. JSON.parse是解析json字符串的首选方法

答案 2 :(得分:0)

- >什么是在Node.js中解析JSON最高效的方法?

JSON流可能是因为内存占用率低。

查看dominictarr或mafintosh所做的工作

https://github.com/mafintosh/json-format-stream

https://github.com/mafintosh/through-json

https://github.com/dominictarr/JSONStream