javascript - 在 jQuery 中,如何高效地添加大量元素?

标签 javascript jquery dom performance

我目前有一个真值表生成器的草图。虽然它工作正常,但速度相当慢。我添加到 <table> 中的 bool 值的每个组合使用 jQuery。对于每个值,一个 <td>元素由 jQuery 创建,然后添加到 <table> .此外,我使用 jQuery UI 来制作漂亮的按钮集,而不是单选按钮。

在我发布的代码摘录中,table是一个包含每个 bool 组合的数组。也许我的代码有点难以理解,但它基本上归结为有 4 个 bool 变量(16 种可能性),96 <td>元素是使用添加的类和 data 创建的属性集。在第二部分中,创建了三组三个单选按钮并将其转换为一个 jQuery UI 按钮集。

我使用计时器计算出在所有内容填满之前大约需要 0.4 秒。没什么大不了的,但它肯定很明显,并且不会对用户产生积极影响,因为每次他输入不同的 bool 公式时,加载都需要半秒钟。

$table = $('#table');
$.each(table, function(k, v) {
    $tr = $('<tr>').addClass('res').data('number', k);
    $.each(v[0], function(k2, v2) {
        $td = $('<td>').text(v2).addClass(v2 ? 'green notresult' : 'red notresult');
        for(var i = 0; i < 4; i++) {
            $td.data(i, i === k2);
        }
        $tr.append($td);
    });
    $tr.append($('<td>').addClass('spacing'));
    $table.append(
        $tr.append(
            $('<td>').text(v[1]).addClass(v[1] ? 'green result' : 'red result')
        )
    );
});

// ... here is some code that's not slowing down

$radiobuttonsdiv = $('#radiobuttonsdiv');
for(var i = 0; i < 4; i++) {
    var $radiobase = $('<input>').attr('type', 'radio')
                                .attr('name', 'a'+i)
                                .click(handleChange);
    // .label() is a custom function of mine which adds a label to a radio button
    var $radioboth = $radiobase.clone().val('both').label();
    var $radiotrue = $radiobase.clone().val('true').label();
    var $radiofalse = $radiobase.clone().val('false').label();
    var $td1 = $('<td>').addClass('varname').html(i);
    var $td2 = $('<td>').attr('id', i);
    $td2.append($radioboth, $radiotrue, $radiofalse).buttonset();
    var $tr = $('<tr>').append($td1, $td2);
    $radiobuttonsdiv.append($tr);
}

我的问题是:

  • 如何优化使用 jQuery 的表格填充?或者在这种情况下表格可能不是最佳解决方案?
  • 是否可以暂停绘图,因为这可能会减慢一切?

最佳答案

尽量避免在循环中使用 .append,尤其是在添加大量元素时。这始终是性能 killer 。

更好的选择是使用标记构建一个字符串,并在循环完成时执行一个(或尽可能少的).append。

我看到您正在使用 .data,这让事情变得有点复杂,但另一种选择是使用 metadata用于将结构化标记附加到现有标签的插件。

关于javascript - 在 jQuery 中,如何高效地添加大量元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422169/

相关文章:

javascript - js中的数组打乱顺序

javascript - 如何: write nice HTML code and Javascript console

javascript - 在 angularjs 中反转数组

jquery - 我可以使用 jQuery 选择具有 XPath 属性模式的 DOM 节点吗?

JavaScript 根据第一个事件创建第二个事件

javascript - 我应该在 Javascript 中使用标签吗? (如果是,什么时候?)

javascript - 如何根据我的 JSON 数据动态创建 HTML DOM?

javascript - $(this) 正在选择窗口对象而不是单击元素 jquery

javascript - 显示对象内容 - JS/jQuery

javascript - 在不同的 DOM 元素中组合/批量更新多个 CSS 以减少回流/重绘?