美文网首页
大量dom操作的优化

大量dom操作的优化

作者: 小漠穷秋 | 来源:发表于2018-04-28 09:14 被阅读0次

按照高程上面的解释
1.使用createDocumentFragment
2.使用innerHTML
3.使用事件代理
4.dom渲染使用requestAnimationFrame进行优化

比如一道笔试题:向ul中添加十万个li。

普通方式为:
(function() {
const ulContainer = document.getElementById("ultest");
// 防御性编程
if (!ulContainer) {
return;
}
for (let i = 0; i < 100000; i++) {
const liItem = document.createElement("li");
liItem.innerText = i + 1;
// EventListener 回调函数的 this 默认指向当前节点,若使用箭头函数,得谨慎
liItem.addEventListener("click", function() {
alert(this.innerText);
});
ulContainer.appendChild(liItem);
}
})()

改进之后:

(function() {
const ulContainer = document.getElementById("ultest");

// 防御性编程
if (!ulContainer) {
return;
}

const total = 100000; // 插入数据的总数
const batchSize = 4; // 每次批量插入的节点个数,个数越多,界面越卡顿
const batchCount = total / batchSize; // 批处理的次数
let batchDone = 0; // 已完成的批处理个数

function appendItems() {
// 使用 DocumentFragment 减少 DOM 操作次数,对已有元素不进行回流
const fragment = document.createDocumentFragment();

for (let i = 0; i < batchSize; i++) {
  const liItem = document.createElement("li");
  liItem.innerText = batchDone * batchSize + i + 1;
  fragment.appendChild(liItem);
}

// 每次批处理只修改 1 次 DOM
ulContainer.appendChild(fragment);
batchDone++;
doAppendBatch();

}

function doAppendBatch() {
if (batchDone < batchCount) {
// 在重绘之前,分批插入新节点
window.requestAnimationFrame(appendItems);
}
}

// kickoff
doAppendBatch();

// 使用 事件委托 ,利用 JavaScript 的事件机制,实现对海量元素的监听,有效减少事件注册的数量
ulContainer.addEventListener("click", function(e) {
const target = e.target;

if (target.tagName === "LI") {
  alert(target.innerText);
}

});
})();

针对documentFragment.appendChild,也可以使用
for(let i = 0; i < 10; i++) {
html +=<li>item</li>
}
进行替换。耗时会花在字符串连接上。但是总体性能要比直接操作dom要快。

相关文章

  • 大量dom操作的优化

    按照高程上面的解释1.使用createDocumentFragment2.使用innerHTML3.使用事件代理4...

  • 性能、打包题目

    前端性能优化 页面DOM节点太多,会出现什么问题?如何优化? DOM太多会造成页面加载卡顿, 操作DOM节点 在外...

  • 如何提高网页性能?

    1.用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能 2.少用全局变量 3.图...

  • 高性能Java script(DOM操作)

    三、DOM操作的优化 a.Ecama 和 DOM 是两座岛屿 在浏览器中,实现DOM操作是很耗性能的事情 应该做的...

  • 2.JavaScript优化-DOM

    DOM优化 一、DOM与JavaScript 浏览器会把DOM与js独立实现-像两个独立的小岛 js操作dom-从...

  • DOM的优化

    DOM的优化 由于解释JavaScript的引擎和解释DOM的引擎是相互独立的,从而导致DOM操作天生就很慢(为什...

  • JavaScript性能优化技巧

    DOM优化 DOM与JavaScript 浏览器会把dom与js独立实现像两个独立的小岛 js操作dom从一个岛到...

  • DOM 操作的性能优化

    1. 减少nodeList的查询。 比如 var divs = document.getElementsByTag...

  • JavaScript性能提升之——优化DOM操作

    在web应用中,DOM操作一直属于是最常见的性能瓶颈,优化DOM操作就可以大幅度提升应用的速度,现今火热的Reac...

  • 如何进行网站性能优化

    减少HTTP请求数。使用缓存。脚本的无阻塞加载。内联脚本的位置优化等。Javascript中的DOM 操作优化、C...

网友评论

      本文标题:大量dom操作的优化

      本文链接:https://www.haomeiwen.com/subject/mtbwlftx.html