读取/解析 JSON 对象(例如通过
<script>
DOM 节点,例如 JSONP)是否是(大多数)浏览器的同步阻塞操作?在什么情况下,JSON 对象太大而无法对对象进行客户端操作(例如锁定浏览器、脚本运行速度太慢等)?
问问题
883 次
2 回答
2
是的,解析 JSON 字符串是一个阻塞操作。(请注意,如果您正在使用来自 Web 服务的 JSONP,那么您不必明确地将字符串解析为 JS)。
您必须有一个非常大的 JSON 字符串才能成为现代浏览器的问题。如果您发现某个操作确实锁定了浏览器,您可以通过 web worker 避免这种情况,这允许阻塞操作在单独的线程中完成。
于 2012-10-23T20:48:37.723 回答
1
1) 是的,解析 JSON 是阻塞的。非阻塞操作的标志是像这样传递回调:
$.get('/stuff/1', function (data) {
// do stuff with `data`
});
而块操作通常是这样编写的
var stuff = JSON.parse(theData);
如果JSON.parse
是非阻塞的,它看起来像这样:
JSON.parse(theData, function (stuff) {
// process `stuff`
});
解析 JSON 是一个非常快速的操作,因此它不需要是非阻塞的。
2)真的很大。解析 JSON,尤其是在具有本机JSON.parse
方法的浏览器(几乎所有)中非常快。JSON 是一种简单的格式,因此可以快速解析。
于 2012-10-23T20:33:30.857 回答