【问题标题】:Node.js - process.nextTick and parseJSONNode.js - process.nextTick 和 parseJSON
【发布时间】:2015-08-04 21:39:39
【问题描述】:

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

在下面的 sn-p 中使用 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); });
     }
}

【问题讨论】:

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


    【解决方案1】:

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

    可能是 JSON 流,因为内存占用少。

    查看 dominictarr 或 mafintosh 所做的工作

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

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

    https://github.com/dominictarr/JSONStream

    【讨论】:

      【解决方案2】:

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

      这两个代码块基本上做同样的事情。最下面的效率更高:

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

      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 的错误,它的位置很好。由于您似乎想要处理错误(因为如果抛出异常,您将错误参数传递给回调),那么我会说它是正确的。

      【讨论】:

      • 在 try/catch 中,result 应该在之前被删除。否则在 try 作用域结束后销毁。
      • 它在 process.nextTick 中被引用...我刚试了一下,它按预期工作:回调得到了正确的解析值。
      【解决方案3】:

      首先 . process.nextick 是异步的... Try catch 可能无法正常工作。 JSON.parse 是解析 json 字符串的首选方式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 2023-01-04
        • 2011-12-28
        • 1970-01-01
        • 2019-08-23
        • 1970-01-01
        • 2014-01-11
        相关资源
        最近更新 更多