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

146 阅读3分钟

JavaScript性能优化与调试技巧指南:让你的代码飞起来 🚀

在现代前端开发中,性能优化是提升用户体验的关键环节。一段运行流畅、加载快速的代码,不仅能让用户爱不释手,还能显著减少资源浪费。今天,我们就来聊聊几个实用的 JavaScript 性能优化技巧,帮助你打造更高效的代码。


1. 减少重绘和重排:让页面动静皆宜

页面的重绘和重排(Repaint 和 Reflow)是性能优化中的重要概念。浏览器需要根据 DOM 的变化重新计算布局或者绘制页面,这两个过程会占用大量的性能。如果频繁发生,就会导致页面卡顿。

优化建议:

  • 合并 DOM 操作:
    尽量减少多次修改 DOM 的次数。例如,使用 document.createDocumentFragment() 来批量添加节点,而不是每次修改都触发渲染。
  • 避免直接查询或修改样式:
    例如,不要在循环中频繁调用 offsetHeightgetComputedStyle,因为这些操作会导致浏览器强制刷新布局。
  • 使用 CSS 动画而非 JavaScript 动画:
    CSS 动画性能更高,因为浏览器会将它们放在 GPU 上处理。

2. 使用节流和防抖:给函数“减负”

认识防抖函数和节流函数?

  • 1、防抖:在事件停止触发后的延迟时间内只执行一次,可以理解为游戏回城,回城无冷却,但是否达到回城生效条件,以最后一次开始回城时间为准

  • 2、节流:在一定时间间隔内最多执行一次,可以理解为游戏技能,固定时间只能释放一次,冷却时无法再次使用

在开发中,某些事件(如滚动、输入框输入、窗口大小调整)可能会被频繁触发,导致函数调用过于频繁,从而拖慢性能。此时,节流和防抖技术是你的好帮手。

防抖(Debounce)?
防抖让一个函数在最后一次触发后的一段时间才执行。如果短时间内重复触发,则重置计时。

我们也可以直接认为这相当于一个拦截器

image.png

image.png

下方图片中,蓝色间隔是输入时间间隔,当等待时间达到对应设置限度后,触发黄色线条对应的响应函数(发起网络请求)

image.png

代码:

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

节流(Throttle)?
节流让一个函数在规定时间内只执行一次,无论触发了多少次。

image.png

代码:

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

表 节流与防抖对比

特性节流(Throttling)防抖(Debouncing)
执行频率在事件频繁触发时,以固定的时间间隔执行在事件停止触发的延迟时间内执行一次
应用场景页面滚动、鼠标移动、窗口调整大小等高频事件输入框搜索、按钮点击防重复等需要延迟响应
目的限制执行频率,降低函数调用的次数延迟执行,确保只在停止操作后执行一次

使用场景:

  • 滚动事件:使用节流。
  • 搜索框输入:使用防抖。

3. 以用户体验为中心

优化性能的最终目的是提升用户体验。因此,除了代码本身的优化,我们也要关注实际效果。可以通过用户反馈、真实设备测试等方式,确保页面运行流畅,交互体验优良。


性能优化是一个持续的过程,需要我们不断发现问题、调整策略。希望这些技巧能帮助你更好地优化代码,让你的项目不仅功能强大,还运行如丝般顺滑! 🎉

如果你有其他的优化技巧或者疑问,欢迎留言分享~ 😊