javascript - 当使用新值循环 2000 个元素的数组时,浏览器更新元素需要很长时间

标签 javascript html json

我正在重构我的代码,以便我的搜索机制搜索结果将从 ajax/json 获得结果。但是通过这样做,浏览器似乎停止响应(仅限当前页面选项卡),直到数据填充到 select 标记

这是我正在做的。

for (i = 0; i < jsonData["outlet"].length; i++) {
         outlet.innerHTML += "<option value=" + jsonData["outlet"][i] + ">" + jsonData["outlet"][i] + "</option>";
    }

这些json数据的长度在2000左右

最佳答案

将其全部缓冲在内存中的字符串中。这样比较快。

然后,当字符串完成后将其输出到 HTML。

在您当前的代码中,您在每次迭代时都强制进行图形回流。页面的每次迭代都必须重新计算整个页面布局。这会花费大量的 CPU 周期。

function getBuffer(jsonData) {
        var buffer = [];
        for (i = 0; i < jsonData["outlet"].length; i++) {
                 buffer[i] = "<option value=" + jsonData["outlet"][i] + ">" + jsonData["outlet"][i] + "</option>";
            }
        return buffer.join('');
    }
    var jsonData = {outlet:["foo","bar","baz"]};
    for(flood = 3;flood<10000;flood++) {
        jsonData.outlet[flood] = 'fooding '+flood;
    }
    var outlet = document.getElementById('outlet');
    outlet.innerHTML = getBuffer(jsonData);
<select id="outlet"></select>

关于javascript - 当使用新值循环 2000 个元素的数组时,浏览器更新元素需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35767385/

相关文章:

javascript - 自动完成使用羊驼形式显示键和值

javascript - 禁用滚动功能

html - 全宽标题不起作用

javascript - 通过名称调用不属于全局作用域的函数

php - 如何使用 PHP、JS 和 HTML 正确处理多对多关系?

javascript - 有办法到 "compress"以下所以不会那么长

json - 包含空值的 BsonDocument 的 Newtonsoft.Json.JsonConvert.SerializeObject 因 InvalidCastException 而失败

Python:当第一列不总是相等时,抓取表/获取特定列

javascript - SyntaxError : JSON. 解析:youtube api 搜索出现意外字符

javascript - 是否可以覆盖/阻止避免每小时点击一次以上的 Javascript 代码?