javascript - 如何通过附加图标提高 jQuery 性能?

标签 javascript jquery performance

我正在使用 jQuery 构建电子表格编辑器,但我遇到了大表格的性能问题。 该表包含许多数据集,当单击其中一个时,图标将添加到其他数据集的第一个单元格中。代码如下所示:

$('.click_icon').remove();
for (var i = 0; i < datasets.length; i++) {
  var first_cell = $('td.content[dataset="' + datasets[i].id + '"]').filter(':first');
  if (in_group(datasets[i].id)) {
    first_cell.append('<i class="icon-remove click_icon remove_group" style="float:right"></i>');
  } else {
    first_cell.append('<i class="icon-magnet click_icon add_group" style="float:right"></i>');
}

对于 500 多个数据集,这大约需要 5 秒。 in_group() 只是一个小函数,用于检查集合是否与所选数据集在一个组中。

我想知道在点击之前创建图标并使用 show() hide() 是否会更快?还有其他想法吗?

我在 Ubuntu 上使用 Chromium。 (版本 28.0.1500.52 Ubuntu 12.04)

最佳答案

在内存中构建表格并且只更改一次 DOM :

$('.click_icon').remove();
var table = $('table');
var clone = table.clone(true);

for (var i = 0; i < datasets.length; i++) {
  var _class = in_group(datasets[i].id) ? 
                     'icon-remove click_icon remove_group' : 
                     'icon-magnet click_icon add_group',
      elem   = $('<i />', {'class': _class, style:'float:right'});

  $('td.content[dataset="' + datasets[i].id + '"]', clone).filter(':first')
                                                          .append(elem);
}

table.replaceWith(clone);

这是一个通用示例,您可能需要对其进行调整以使其与您的标记一起正常工作。
我通常会使用纯 JS 来提高性能,并使用 documentFragments,但我认为 jQuery 在这样做时在内部使用片段。

关于javascript - 如何通过附加图标提高 jQuery 性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17492243/

相关文章:

javascript - 解码来自 Ajax 调用的 Json 响应

javascript - 括号重要吗?

android - 果冻 bean 上TextView的requestFocus慢

javascript - 如何在 http.send() 函数中传递对象?

javascript - AngularJS Controller 内的数组未初始化

javascript - Jquery:向下拉菜单添加切换操作

performance - Entity Framework Core 插入多个实体类似于 SQL 单个插入语句

javascript - 在呈现 `Page` 之前获取数据异步

javascript - 使用 requirejs 加载 mustache

jquery - 如何让 jQuery 在返回之前等待 Ajax 调用完成?