我想使用JSONStream库对一个大型javascript对象进行字符串化。它的工作速度非常快,但问题是仍然阻塞了我的主循环。那是因为我将整个对象写在一个write()上。
但是,即使我例如遍历and数组的元素,并一一写入它们,它仍然会阻塞。我认为这不是一个好的解决方案,因为如果我拥有一个只有一个键和一个非常大的值的对象该怎么办。
const stringify = (obj) => {
return new Promise((resolve, reject) => {
const stream = JSONStream.stringify();
const result = [];
stream.on('data', (data) => {
result.push(data);
});
stream.on('error', (err) => {
reject(err);
});
stream.on('end', () => {
resolve(result.join(''));
});
if (Array.isArray(obj)) {
for (const elem of obj) {
stream.push(elem);
}
}
stream.end();
});
};
我通过将Interval设置为0ms来增加计数器来检查循环是否被阻塞。最后,计数器显示了我在拉线循环之外获得了多少滴答声。
let counter = 0;
const interval = setInterval(() => {
counter++;
}, 0);
await json.stringify(obj);
clearInterval(interval);