gpt4 book ai didi

json - NodeJS JSON.parse(...) 需要很长时间才能完成(在 WebStorm 中的调试器下)

转载 作者:太空宇宙 更新时间:2023-11-03 22:42:51 24 4
gpt4 key购买 nike

编辑

问题似乎与 WebStorm 本身有关,它似乎不想处理包含大量嵌套对象的对象。它也不想在“Watches”窗口中显示对象内容。这个问题有点奇怪,因为我能够检查字符串,它的加载速度非常快。似乎是 WebStorm 问题

<小时/>

我有一个相对较大的 JSON 文件 4.9mb,需要在 NodeJS 中处理,该文件存储在文件系统中,并使用以下代码行加载:

var path = require('path');

var filename = path.join(__dirname, 'db_asci.json');
var fs = require('fs');

var content = fs.readFileSync(filename);

debugger;
var decycledObj = JSON.parse(content);
debugger;

问题是,在第一个 debugger; 断点被击中后,第二个断点没有被击中,我等了 20 多分钟,什么也没发生,一个处理器核心加载到 100%。我无法调试该函数,因为它是 native 的。

Here是 JSON 的 ASCI 版本

Here是UTF8版本的JSON

我做错了什么?

最佳答案

您遇到的问题是不是 JSON 解析花费的时间太长。事实上,试试这个:

var start = Date.now();
var obj = JSON.parse(fs.readFileSync(filename));
console.log('Took', Date.now() - start, 'ms');

您可能会发现花费了不到一秒左右的时间。

您遇到的问题是调试器本身的问题 - 观察者效应。观察系统的行为会改变该系统。

我假设您正在使用 Node 检查器。每当您有一个非常大、复杂的对象时,将该对象加载到检查器中的成本就非常昂贵。在此过程中,您的 Node 进程将固定 CPU 并且事件循环暂停。

我的猜测是 JSON 被解析并创建了一个巨大的(假设我们正在处理 5MB)对象。然后, Node 会调用第二个调试器,检查器需要加载本地变量。这个极其缓慢的过程开始了,检查器不会显示您已经到达断点,直到它完成。所以对你来说它看起来只是卡住的。

尝试用一些小文件替换您的 JSON 文件(例如 {a:1})。它应该可以快速加载。

<小时/>

您真的需要目视检查整个物体吗?有一些工具更适合查看 JSON 文件。

关于json - NodeJS JSON.parse(...) 需要很长时间才能完成(在 WebStorm 中的调试器下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19747783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com