发布于 2026-01-05 0 阅读
0

使用 Javascript DOM 操作提升性能 DEV 全球展示挑战赛,由 Mux 呈现:展示你的项目!

利用 JavaScript DOM 操作提升性能

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

我撰写本文旨在通过实例向您展示,在使用原生 JavaScript 开发 Web 应用程序时如何避免性能问题。

使用选择器代替嵌套元素

// BAD
let menu = document.querySelector('header > nav > ul.menu');

// GOOD
let menu = document.querySelector('.menu');
Enter fullscreen mode Exit fullscreen mode

避免在循环内进行 DOM 操作

// BAD
for (let i = 0; i < 10; i++) {
    document.querySelector('.numbers').innerText += i;
}

// GOOD
let numbers = '';
for (let i = 0; i < 10; i++) {
    numbers += i;
}
document.querySelector('.numbers').innerText = numbers;
Enter fullscreen mode Exit fullscreen mode

不要在循环中使用 DOM 值

// BAD
let nodes = document.querySelectorAll('.menu-items');
for (let i = 0; i < node.length; i++) { ... }

// GOOD
let nodes = document.querySelectorAll('.menu-items');
const size = nodes.length;
for (let i = 0; i < size; i++) { ... }
Enter fullscreen mode Exit fullscreen mode

使用 CSS 类代替内联样式

// BAD 
let card = document.querySelector('.card');
card.style.width = '400px';
card.style.color = '#f0f0f0';
card.style.marginTop = '10px';

// GOOD 
let card = document.querySelector('.card');
card.style.cssText = ''.concat(
    'width       : 400px;',
    'color       : #f0f0f0;',
    'margin-top  : 10px;'
);

// BETTER 
.card-custom {
    width: 400px;
    color: #f0f0f0;
    margin-top: 10px;
}

let card = document.querySelector('.card');
card.classList.add('card-custom');
Enter fullscreen mode Exit fullscreen mode

向 DOM 中添加元素是最耗时的操作,请选择正确的方法。

// BAD
let container = document.querySelector('.container');
for (let i = 0; i < 1000; i++) {
    let a = document.createElement('a');
    a.text = `Row N° ${i}`;
    container.appendChild(a);
}

// GOOD
let container = document.querySelector('.container');
let html = '';
for (let i = 0; i < 1000; i++) {
    html = html.concat(`<a>Row N° ${i}</a>`);
}
container.innerHTML = html;

// BETTER
let a = document.createElement('a');
let container = document.querySelector('.container');
for (let i = 0; i < 1000; i++) {
    let cloneA = a.cloneNode(true);
    cloneA.text = `Row N° ${i}`;
    container.appendChild(cloneA);
}

// BETTER^2
let a = document.createElement('a');
let container = document.querySelector('.container');
let documentFragment = document.createDocumentFragment();
for (let i = 0; i < 1000; i++) {
    let cloneA = a.cloneNode(true);
    cloneA.text = `Row N° ${i}`;
    documentFragment.appendChild(cloneA);
}
container.appendChild(documentFragment);
Enter fullscreen mode Exit fullscreen mode

仅在首次渲染时使用 innerHTML,然后使用 DOM 方法。

// BAD
let container = document.querySelector('.container');
container.innerHTML = '<input type="text" name="example" value="Hi DEVS!">';
container.innerHTML = '<input type="text" name="example" value="Bye DEVS!">';

// GOOD
let container = document.querySelector('.container');
container.innerHTML = '<input type="text" name="example" value="Hi DEVS!">';
let input = container.querySelector('input');
input.value = 'Bye DEVS!';

Enter fullscreen mode Exit fullscreen mode

如果您有什么建议,请留言。
保持冷静,继续编程!

文章来源:https://dev.to/grandemayta/javascript-dom-manipulation-to-improve-performance-459a