Streaming / Plugin JSON.stringify Node.js / Express中的输出

我有一个场景,我需要从我的Node.js / Express RESTful API返回一个非常大的对象,转换成一个 JSON字符串.
res.end(JSON.stringify(obj));

但是,这似乎不能很好地扩展.具体来说,它在我的测试机器上运行良好,1-2个客户端连接,但我怀疑这个操作可能会杀死cpu&许多客户端同时请求大型JSON对象时的内存使用情况.

我已经在寻找一个异步JSON库,但是the only one I found似乎有一个问题(具体来说,我得到一个[RangeError]).不仅如此,它会将字符串返回一个大块(例如,回调在整个字符串中被调用一次,意味着内存占用不会减少).

我真正想要的是一个完全异步的管道/流版本的JSON.stringify函数,这样就可以将数据直接打包到数据流中,从而节省了内存占用,同时也消耗了cpu同步时尚.

理想情况下,您应该按照流量传输数据,而不是将所有数据缓冲为一个大对象.如果你不能改变这一点,那么你需要将stringify打破成更小的单位,并允许主事件循环使用 setImmediate处理其他事件.示例代码(我将假设主对象有很多顶级属性,并使用它们来分割工作):
function sendobject(obj,stream) {
    var keys = Object.keys(obj);
    function sendSubObj() {
       setImmediate(function(){
          var key = keys.shift();
          stream.write('"' + key + '":' + JSON.stringify(obj[key]));
          if (keys.length > 0) {
            stream.write(',');
            sendSubObj();
          } else {
            stream.write('}');
          }
       });
    })
    stream.write('{');
    sendSubObj();
}

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...