JavaScript 性能优化与调试技巧笔记 | 豆包MarsCode AI 刷题

68 阅读3分钟

在 JavaScript 开发中,性能优化和调试是至关重要的环节。以下将详细探讨通过优化代码来提高性能,包括减少重绘和重排、使用节流和防抖技术以及使用性能分析工具等方面。 

一、减少重绘和重排

重绘(Repaint)是指元素外观的改变,但不影响布局。重排(Reflow)则是指布局的改变,这通常是更耗费性能的操作。 

 为了减少重绘和排,我们可以采取以下策略: 

 避免频繁操作样式:尽量一次性设置多个样式属性,而不是多次单独设置。

// 不好的做法 element.style.backgroundColor = 'red'; element.style.border = '1px solid black'; 

 // 好的做法 element.style.cssText = 'background-color: red; border: 1px solid black;';

批量修改 DOM:如果需要对多个 DOM 元素进行操作,先将其从文档流中移除,修改完成后再放回。

避免使用 table 布局:因为 table 布局的重绘和重排成本较高。

二、节流和防抖技术

节流(Throttling)是指在一定时间内,无论触发多少次事件,只执行一次函数。防抖(Debouncing)则是在事件触发后,等待一段时间,如果在这段时间内没有再次触发事件,才执行函数。

节流的实现示例:

function throttle(func, delay) { let lastCallTime = 0; return function() { const now = Date.now(); if (now - lastCallTime > delay) { func.apply(this, arguments); lastCallTime = now; } }; }

防抖的实现示例:

function debounce(func, delay) { let timer; return function() { clearTimeout(timer); timer = setTimeout(() => { func.apply(this, arguments); }, delay); }; } 

防抖技术适用于以下场景:

  1. 输入框实时搜索:当用户在输入框中连续输入时,不希望每次输入都触发搜索请求,而是在用户停止输入一段时间后再进行搜索。

  2. 窗口大小调整:频繁的窗口大小调整事件可能导致不必要的计算和操作,使用防抖可以在窗口大小停止变化一段时间后再进行相应的布局调整等处理。

  3. 滚动事件:例如无限滚动加载更多内容的场景,避免在滚动过程中频繁触发加载操作,而是在滚动停止一段时间后再加载。

  4. 频繁点击按钮:如果一个按钮可能被用户快速多次点击,使用防抖可以确保在最后一次点击后的一段时间内才执行相应的操作,避免重复操作带来的问题。

在实际应用中,例如滚动事件、输入框实时搜索等场景,可以根据具体需求选择节流或防抖技术。

三、使用性能分析工具

常用的性能分析工具有浏览器自带的开发者工具,如 Chrome 的 Performance 面板。

通过 Performance 面板,可以查看页面加载过程中的各项性能指标,如 CPU 使用率、内存占用、网络请求等。还可以分析函数的执行时间和调用栈,帮助找出性能瓶颈所在。

例如,在发现某个函数执行时间过长时,可以进一步查看其内部的逻辑,是否存在复杂的计算或者不必要的循环。

四、其他优化技巧

  1. 合理使用数据结构:根据具体需求选择合适的数据结构,如数组、对象、Map、Set 等。
  2. 避免不必要的计算:在可能的情况下,提前计算并缓存结果,避免重复计算。
  3. 代码压缩和混淆:减小代码体积,提高加载速度。

总之,JavaScript 性能优化是一个综合性的工作,需要结合具体的业务场景和代码逻辑,灵活运用上述技巧,不断进行测试和优化,以提升用户体验和页面性能。