我在javascript中使用eval()来评估大量的js代码(不仅仅是json,还有函数调用)。浏览器在浏览期间冻结,即用户无法滚动浏览器或点击任何内容。有没有解决这个冻结问题的方法?
答案 0 :(得分:4)
在大多数浏览器中,JavaScript在UI线程上运行,因此它会在您描述时阻止UI。取消阻止UI的最佳方法是将JS拆分为较小的部分,并将它们与setTimeout串联在一起(将线程控制权交还给浏览器以进行UI渲染)
答案 1 :(得分:1)
您也可以尝试通过在页面中注入新的脚本标记来执行代码:
function executeCode(code) {
var element = document.createElement('script');
element.type = 'text/javascript';
try {
element.appendChild(document.createTextNode(code));
document.body.appendChild(element);
}
catch (e) {
element.text = code;
document.body.appendChild(element);
}
}
var code = 'alert("hello world");';
executeCode(code);
答案 2 :(得分:0)
你必须将你的功能分解成更小的部分。我建议将它们与setTimeout
合并。
在现代浏览器中,web workers可以在后台计算数据。