问题似乎与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%。我无法调试该函数,因为它是原生函数。
Here是JSON的ASCI版本
Here是JSON的UTF8版本
我做错了什么?
答案 0 :(得分:3)
您遇到的问题是不 JSON解析耗时太长。的确,试试这个:
var start = Date.now();
var obj = JSON.parse(fs.readFileSync(filename));
console.log('Took', Date.now() - start, 'ms');
您可能会发现它花了不到一秒左右的时间。
您遇到的问题是调试器本身的问题 - 观察者效应。观察系统的行为改变了该系统。
我假设您正在使用节点检查器。每当你有一个非常大的复杂对象时,将对象加载到检查器中是非常昂贵的。在执行此操作时,您的节点进程将挂起CPU并暂停事件循环。
我的猜测是JSON被解析并且创建了一个巨大的(假设我们正在处理5MB)对象。然后节点点击第二个debugger
,检查员需要加载本地。极其缓慢的过程开始了,检查员不会证明你已经到达断点,直到它完成。所以对你来说它看起来很冷。
尝试用小的东西替换你的JSON文件(比如{a:1}
)。它应该快速加载。
你真的需要目视检查整个物体吗?有些工具更适合查看JSON文件。
答案 1 :(得分:2)
答案 2 :(得分:2)
+1为Pradeep Mahdevu解决方案,这是另一种相同的方式,(使用异步版本编辑)
var fs = require ('fs');
var options = { encoding: 'utf8' };
var jsonData = fs.readFile('db_asci.json', options, function (err, data) {
if (err) throw err;
var object = JSON.parse(data);
});