javascript - 如何通过减少 DOM 操作来提高性能?

标签 javascript performance dom knockout.js

在下面的简单示例中,Knockout 调用了 18 次 HTMLElement.appendChild 来呈现模板。它不使用 DocumentFragment,因此这 18 个操作中的每一个都是在导致回流的实时 DOM 上进行的。理想情况下,在实时 DOM 上应该只调用一次 appendChild

这确实会损害性能,有谁知道如何减少损害吗?


JS BIN用代码。


JavaScript

var viewModel = {
  people:[
    {name: 'Tim'},
    {name: 'John'},
    {name: 'Greg'}
  ]
};

ko.applyBindings(viewModel, document.getElementById('list1'));

HTML

<ul id='list1' data-bind="foreach: { data: people }">
  <li>
      <h3 data-bind="text: name"></h3>
  </li>
</ul>

最佳答案

我的 Repeat plugin提供可用作 foreach 绑定(bind)的替代方法的绑定(bind)。它在许多情况下速度更快,因此您只需要进行试验以比较性能。

为了比较,下面是使用 repeat 绑定(bind)示例的方式:

<ul id='list1'>
  <li data-bind="repeat: people">
    <h3 data-bind="text: $item().name"></h3>
  </li>
</ul>

http://jsbin.com/lizi/7/edit

关于javascript - 如何通过减少 DOM 操作来提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21615600/

相关文章:

c - 数百万 UINT64 RGBZ 图形像素的最快排序算法

Ruby-on-rails 4 性能低下

javascript - Jquery index() 找不到我的元素

javascript - DOM 事件不会在 off-DOM 元素中冒泡

javascript - Selenium 处理 HTML 弹出窗口

javascript - 创建简单的角色游戏

javascript - 使用javascript从对象中删除项目的更好方法是什么

javascript - 我需要将 <td> 的文本设置为变量

javascript - backbone.js 应用程序 jquery ajaxsetup 在切换 View 时并不总是有效

javascript - 从列表中删除元素 - JQuery/JavaScript