javascript - chrome 中的 DOM 更新比 firefox 慢看起来像 chrome 有一些渲染问题

标签 javascript jquery google-chrome firefox dom

我写了一段代码,可以在 DOM 中转储大量节点。当我在 firefox 中加载它时,它会在 2-3 秒 中呈现,但在 chrome (ver:33) 中它会卡住 UI 并且呈现需要 em>长时间(8-10 秒)

$.ajax({
    xhr: function () {
        var xhr = new window.XMLHttpRequest();
        xhr.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                var percentComplete = evt.loaded / evt.total * 100;
                $("#fetchProgress").attr("value", percentComplete);
            }
        }, false);
        return xhr;
    },
    type: 'GET',
    url: "/GetSomething",
    data: {},
    success: function (data) {
        ///process and dump to DOM//
        var fileLines = data.split('\n');
        var htmlString = '';
        for (var i = 0; i < fileLines.length; i++) {
            htmlString += '<span>' + (i + 1) + '. ' + fileLines[i]+</span>;
            if ((i % 1000) == 0) {
                $("#textPlace").append(htmlString);
                htmlString = '';
            }
        }
        fileLines = null;
        $("#textPlace").append(htmlString);
    }
});

我从互联网上得知 chrome 有一些渲染错误,并尝试从这个 URL 进行破解。 “Chrome Bug - window.scroll method intercepts DOM Rendering” 它开始工作,但现在又不工作了。请提出一些建议。 任何帮助表示赞赏。水箱尺寸提前致谢:)

最佳答案

如果我理解你的代码,你有一个数组,你想用 span 绑定(bind)在一起。您可以删除 for()从您的代码(以及其中的模数(=slow)),节省大量时间:

htmlString = '<span>'+ fileLines.join("</span><span>") +'</span>';

那不会显示 i号码,但您可以切换到 li的并使用数字而不是项目符号。


这也可能有效:

var fileLines = '<span>'+ data.replace('\n', '</span><span>') +'</span>';

这有点乱(这可能以 </span><span></span> 结尾,你需要 trim \n 来修复它(很容易做到)),但它不必将它变成一个数组,这应该加快速度

关于javascript - chrome 中的 DOM 更新比 firefox 慢看起来像 chrome 有一些渲染问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22475990/

相关文章:

javascript - 如何在按钮单击事件 ASP 后调用 javascript 函数

javascript - 在 ng-repeat 之外创建一个新作用域

JavaScript 关联数组访问返回 "literal"数组原型(prototype)代码

python - BeautifulSoup 不会返回页面上的所有元素

google-chrome - FCM Web 推送通知 (Chrome) 仅适用于桌面版

javascript - 在索引 html 顶部弹出登录表单

javascript - Dailymotion 自动播放无法在移动设备上运行

javascript - 使用 ajax 在 bootstrap carousel 上附加数据

javascript - 使用通用(动态)代码显示/隐藏悬停列上的行其他行?

google-chrome - 无法使用 Selenium webdriver 将解压的扩展加载到 chrome