浏览器在javascript eval()期间冻结

时间:2010-01-04 22:50:57

标签: javascript json

我在javascript中使用eval()来评估大量的js代码(不仅仅是json,还有函数调用)。浏览器在浏览期间冻结,即用户无法滚动浏览器或点击任何内容。有没有解决这个冻结问题的方法?

3 个答案:

答案 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可以在后台计算数据。