17. JavaScript 的高效开发 离不开 调试与性能优化

109 阅读3分钟

JavaScript 的高效开发 离不开 调试与性能优化

在 JavaScript 开发中,掌握 调试技巧性能优化方法高效开发 的 关键。

1 调试技巧

1.1 基础调试工具

浏览器开发者工具(DevTools),几乎所有现代浏览器都 内置 开发者工具,可以用来 查看代码调试分析性能 等。

1.2 Console 打印信息

  • console.log():打印 普通信息
  • console.error():输出 错误信息
  • console.warn():输出 警告信息
  • console.table():以 表格形式 显示 对象数组
  • console.time()console.timeEnd():测量 代码 执行时间
// 示例代码 1
console.table([1, 2, 4]);
/*
输出
┌─────────┬────────┐
│ (index) │ Values │
├─────────┼────────┤
│ 0       │ 1      │
│ 1       │ 2      │
│ 2       │ 4      │
└─────────┴────────┘
*/

console.time("Execution Time");
// 运行代码...
console.timeEnd("Execution Time");
// Execution Time: 0.007ms

1.3 打断点调试

在 DevTools 的 Sources 面板中,点击行号 设置断点

1.4 捕获异常

try-catch 捕获 代码运行中异常避免 因错误导致 程序崩溃

// 示例代码 2
try {
    JSON.parse('invalid JSON');
} catch (error) {
    console.error("Error parsing JSON:", error);
}

window.onerrorwindow.addEventListener('error') : 捕获 全局 错误日志

2 性能优化

2.1 减少 重绘 和 回流

重绘(Repaint)元素样式改变(如颜色),不影响布局。

回流(Reflow)布局几何属性改变,会引发 重新计算布局

具体实践:

  • 避免频繁操作 DOM;
  • 尽量减少对 样式属性offsetWidthclientHeight)的 频繁读取

2.2 节流(Throttle) 和 防抖(Debounce)

节流(Throttle):限制 函数执行频率

防抖(Debounce):延迟 函数执行,直到一定时间后 再触发

// 示例代码 3
// 防抖示例
function debounce(func, delay) {
    let timer;
    return function(...args) {
        clearTimeout(timer);
        timer = setTimeout(() => func.apply(this, args), delay);
    };
}

// 节流示例
function throttle(func, limit) {
    let lastCall = 0;
    return function(...args) {
        const now = Date.now();
        if (now - lastCall >= limit) {
            lastCall = now;
            func.apply(this, args);
        }
    };
}

2.3 优化 JavaScript 的加载

  • 减少文件大小
    • 压缩代码
    • 去除未使用的代码
  • 代码分割
    • 使用 Webpack 等工具
  • 延迟加载(Lazy Loading):
    • 延迟加载 非关键 资源(如 图片、第三方库)

2.4 使用更高效的 数据结构

根据实际需求 选择 合适的 数据结构:

  • 使用 SetMap 替代 数组 和 对象 进行 快速查找
  • 使用 二分法 或 其他算法 提升 搜索效率

2.5 避免阻塞主线程

JavaScript 是 单线程的,长时间运行 的 任务 会 阻塞 页面渲染。

具体实践:

  • 复杂的 计算任务 交给 Web Worker
  • 使用 requestAnimationFrame 代替 setTimeout 处理动画。
  • 拆分 大型任务(如 setTimeout 分批处理数据)。

2.6 内存管理

避免 内存泄漏

  • 清理 未使用的 定时器事件监听器
  • 避免 全局变量 的 滥用;
  • 及时销毁 不再使用的 对象

2.7 图片 和 资源 优化

使用 适当的 格式

  • 优化图片大小,优先使用现代格式如 WebP

懒加载图片

<!--示例代码 4-->
<img src="placeholder.jpg" data-src="real-image.jpg" loading="lazy">

3 综合调试与性能分析工具

Chrome DevTools

  • Performance 面板:记录 页面性能、分析 加载时间、JS 执行时间;
  • Memory 面板:检测 内存使用、排查 内存泄漏。

Lighthouse

  • 谷歌提供的 性能评估 工具,用于 优化 网页速度 和 质量。

WebPageTestPageSpeed Insights

  • 检查 网页的 加载性能,并 给出 优化建议