青训营X豆包MarsCode 技术训练营第三课 | 性能优化与调试技巧|豆包MarsCode AI 刷题

31 阅读2分钟

在现代Web开发中,性能优化是确保用户体验流畅的重要环节。JavaScript的性能直接影响到网页的响应速度和用户交互体验。以下是一些优化JavaScript代码以提高性能的技巧,包括减少重绘和重排、使用节流和防抖技术、以及利用性能分析工具。

  1. 减少重绘和重排

重绘:当元素的外观发生变化时(例如颜色、背景等),浏览器需要重新绘制这些元素。

重排:当元素的几何属性发生变化时(例如大小、位置等),浏览器需要重新计算元素的布局。

优化技巧:

(1)批量DOM操作:尽量将多个DOM操作合并在一起,减少对DOM的频繁访问。例如,可以先在内存中构建一个文档片段,然后一次性将其添加到DOM中。

const fragment = document.createDocumentFragment();

for (let i = 0; i < 1000; i++) {

const div = document.createElement('div');

div.textContent = Item ${i};

fragment.appendChild(div); }

document.body.appendChild(fragment);

(2)使用CSS类:通过添加或移除CSS类来改变样式,而不是直接修改样式属性,这样可以减少重绘的次数。

(3)避免频繁读取布局信息:如offsetHeight、clientWidth等属性会触发重排,尽量将这些读取操作集中在一起,避免在DOM操作之间频繁读取。

  1. 使用节流和防抖技术

节流:节流是指限制某个函数在一定时间内只能执行一次,适用于频繁触发的事件(如滚动、窗口调整大小等)。

function throttle(func, delay) {

let lastTime = 0;

return function(...args) {

const now = Date.now();

if (now - lastTime >= delay) { lastTime = now; func.apply(this, args); } }; }

window.addEventListener('scroll', throttle(() => { console.log('Scroll event triggered'); }, 200));

防抖:防抖是指在事件触发后,延迟一段时间再执行函数,如果在这段时间内再次触发事件,则重新计时。适用于输入框的实时搜索等场景。

function debounce(func, delay) {

let timeout;

return function(...args) {

clearTimeout(timeout);

timeout = setTimeout(() => { func.apply(this, args); }, delay); }; }

const input = document.getElementById('search');

input.addEventListener('input', debounce(() => { console.log('Input event triggered'); }, 300));

  1. 使用性能分析工具————Chrome DevTools

(1)右键点击“检查”或快捷键F12打开“开发者工具” 屏幕截图 2024-11-23 183518.png (2)切换到“Performance”标签后点击“Record”按钮 屏幕截图 2024-11-23 184133.png (3)录制一段时间后停止录制 屏幕截图 2024-11-23 184847.png 上图可以查看重绘、重排、脚本执行时间等信息,从而进行分析来提高性能。

总结

通过学习,我明白了性能优化的重要性,学会减少重绘和重排,使用节流和防抖技术以及性能分析工具,我还理解了优化不仅仅是为了提升页面的加载速度,更是为了改善用户体验和提升应用的响应能力。