从入门到精通 JavaScript 1000例实战开发专栏--第九章:性能优化

目录

第九章:性能优化

章节简介

1. 减少DOM操作的开销

1.1 DOM操作的性能问题

1.2 优化策略

2. 图片懒加载与资源预加载

2.1 图片懒加载

2.2 资源预加载

3. 避免内存泄漏

3.1 内存泄漏的常见原因

3.2 解决方案

4. 性能测试工具的使用

4.1 浏览器开发者工具

4.2 Lighthouse

4.3 WebPageTest

4.4 其他工具

学习收获


 

第九章:性能优化

章节简介

本章将深入讲解JavaScript和前端开发中的性能优化技巧,包括减少DOM操作的开销、图片懒加载与资源预加载、避免内存泄漏,以及如何使用性能测试工具来评估和优化应用性能。通过本章的学习,您将能够掌握提升网页性能的核心方法,并构建更加高效的应用。


1. 减少DOM操作的开销

1.1 DOM操作的性能问题

频繁的DOM操作会导致浏览器重新计算布局(reflow)和重绘(repaint),从而影响页面性能。

1.2 优化策略

  • 批量操作: 将多次DOM操作合并为一次,减少对DOM树的修改。

     
    javascript

    深色版本

    const ul = document.createElement('ul');
    for (let i = 0; i < 10; i++) {
        const li = document.createElement('li');
        li.textContent = `Item ${i}`;
        ul.appendChild(li);
    }
    document.body.appendChild(ul);
  • 使用文档片段(DocumentFragment): 在内存中构建DOM结构,最后一次性插入到页面中。

     
    javascript

    深色版本

    const fragment = document.createDocumentFragment();
    for (let i = 0; i < 10; i++) {
        const li = document.createElement('li');
        li.textContent = `Item ${i}`;
        fragment.appendChild(li);
    }
    document.querySelector('ul').appendChild(fragment);
  • 避免频繁读写属性: 如果需要多次读取或设置某个属性,可以将其缓存到变量中。

     
    javascript

    深色版本

    const style = window.getComputedStyle(element);
    const width = style.width;
    const height = style.height;

2. 图片懒加载与资源预加载

2.1 图片懒加载

懒加载是一种延迟加载技术,只有当用户滚动到图片区域时才加载图片,从而减少初始页面加载时间。

  • 实现方式: 使用IntersectionObserver API监听元素是否进入视口。
     
    javascript

    深色版本

    const images = document.querySelectorAll('img.lazy');
    
    const observer = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                const img = entry.target;
                img.src = img.dataset.src;
                img.classList.remove('lazy');
                observer.unobserve(img);
            }
        });
    });
    
    images.forEach(img => observer.observe(img));

2.2 资源预加载

通过<link rel="preload">标签提前加载关键资源,提升用户体验。

 

html

深色版本

<link rel="preload" href="style.css" as="style">
<link rel="preload" href="script.js" as="script">

3. 避免内存泄漏

3.1 内存泄漏的常见原因

  • 未释放的引用:全局变量或闭包中保留了对不再使用的对象的引用。
  • 事件监听器未移除:绑定的事件监听器未被清除。
  • 定时器未清理setIntervalsetTimeout未被正确清除。

3.2 解决方案

  • 清理无用引用: 确保在组件销毁时解除对DOM元素或其他对象的引用。

     
    javascript

    深色版本

    let element = document.getElementById('myElement');
    function cleanup() {
        element = null; // 清理引用
    }
  • 移除事件监听器: 使用removeEventListener清理不再需要的事件监听器。

     
    javascript

    深色版本

    const handler = () => console.log('Clicked');
    element.addEventListener('click', handler);
    element.removeEventListener('click', handler);
  • 清理定时器: 使用clearTimeoutclearInterval清理定时器。

     
    javascript

    深色版本

    const timer = setInterval(() => console.log('Tick'), 1000);
    clearInterval(timer);

4. 性能测试工具的使用

4.1 浏览器开发者工具

现代浏览器内置了强大的性能分析工具,可用于检测页面性能瓶颈。

  • 性能面板(Performance Tab)

    • 记录页面加载和交互过程中的性能数据。
    • 分析CPU使用情况、渲染时间和JS执行时间。
  • 内存面板(Memory Tab)

    • 检测内存泄漏问题。
    • 查看堆快照(Heap Snapshot)以分析内存占用。

4.2 Lighthouse

Lighthouse是Chrome DevTools中的一个工具,用于评估网页性能、可访问性和最佳实践。

  • 使用方法
    • 打开Chrome DevTools,选择“Lighthouse”选项卡。
    • 运行审计并查看报告。

4.3 WebPageTest

WebPageTest是一个在线性能测试工具,支持多设备、多网络条件下的性能分析。

  • 功能
    • 模拟真实用户场景。
    • 提供详细的加载瀑布图和性能指标。

4.4 其他工具

  • Google PageSpeed Insights:评估页面性能并提供优化建议。
  • BundleAnalyzer:分析Webpack打包后的文件大小分布。

学习收获

完成本章后,您将能够:

  • 掌握减少DOM操作开销的方法,优化页面渲染性能。
  • 学会使用图片懒加载和资源预加载技术,提升页面加载速度。
  • 理解内存泄漏的成因并采取措施避免其发生。
  • 熟练使用性能测试工具,定位和解决性能瓶颈问题。

继续学习下一章,我们将探讨前端框架的相关内容!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蘑菇二号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值