下面是每个性能优化技术的具体应用场景示例,结合代码说明如何在实际项目中使用这些优化方法:

1. 批量DOM操作与DocumentFragment

应用场景:动态渲染大量列表项(如评论区、商品列表)
问题:逐个添加DOM元素会导致多次重排/重绘
解决方案:使用DocumentFragment在内存中构建DOM树,最后一次性添加到文档

// 模拟从API获取1000条评论数据
const comments = Array(1000).fill().map((_, i) => ({id: i,text: `评论内容 ${i}`
}));function renderComments(comments) {const commentList = document.getElementById('comment-list');const fragment = document.createDocumentFragment();comments.forEach(comment => {const div = document.createElement('div');div.className = 'comment-item';div.innerHTML = `<p>${comment.text}</p>`;fragment.appendChild(div);});commentList.appendChild(fragment); // 单次DOM操作
}renderComments(comments);

2. 事件委托

应用场景:动态列表项的点击事件处理(如待办事项、导航菜单)
问题:为每个列表项单独添加事件监听器会占用大量内存
解决方案:将事件监听器添加到父元素,利用事件冒泡机制

<ul id="todo-list"><li>任务1 <button class="delete">删除</button></li><li>任务2 <button class="delete">删除</button></li><li>任务3 <button class="delete">删除</button></li>
</ul><script>document.getElementById('todo-list').addEventListener('click', function(e) {if (e.target.classList.contains('delete')) {const listItem = e.target.closest('li');listItem.remove(); // 删除对应的任务项}});
</script>

3. 防抖(Debounce)

应用场景:搜索框实时搜索、窗口大小调整事件
问题:频繁触发事件导致性能问题(如每输入一个字符就请求API)
解决方案:延迟执行函数,在用户停止操作后再执行

<input type="text" id="search-input" placeholder="搜索..."><script>const searchInput = document.getElementById('search-input');function search(query) {console.log('搜索:', query);// 这里发送API请求}// 使用防抖包装搜索函数,延迟300ms执行const debouncedSearch = debounce(search, 300);searchInput.addEventListener('input', e => {debouncedSearch(e.target.value);});
</script>

4. 节流(Throttle)

应用场景:滚动加载更多、按钮防双击
问题:短时间内频繁触发同一操作(如滚动事件每秒触发几十次)
解决方案:限制函数执行频率,例如每200ms执行一次

function loadMoreData() {console.log('加载更多数据...');// 从API加载更多内容
}// 使用节流包装加载函数,每200ms最多执行一次
const throttledLoad = throttle(loadMoreData, 200);window.addEventListener('scroll', () => {// 检查是否滚动到页面底部if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 200) {throttledLoad();}
});

5. 图片懒加载

应用场景:电商商品列表、文章配图
问题:首屏加载大量图片导致加载缓慢
解决方案:只在图片进入视口时才加载

<!-- 使用data-src存储真实图片地址 -->
<img data-src="https://example.com/image.jpg" alt="商品图片" class="lazy-load"><script>document.addEventListener('DOMContentLoaded', () => {const lazyImages = document.querySelectorAll('img.lazy-load');const imgObserver = new IntersectionObserver((entries, observer) => {entries.forEach(entry => {if (entry.isIntersecting) {const img = entry.target;img.src = img.dataset.src;img.classList.add('loaded');observer.unobserve(img);}});});lazyImages.forEach(img => imgObserver.observe(img));});
</script>

6. Web Workers

应用场景:复杂数据计算(如大数据可视化、PDF渲染)
问题:耗时计算阻塞主线程导致页面卡顿
解决方案:将计算任务放到Web Worker中执行

// main.js - 主线程代码
function processLargeData() {const worker = new Worker('data-worker.js');// 监听worker返回的结果worker.onmessage = function(e) {console.log('处理后的数据:', e.data);// 更新UI};// 发送大数据到worker处理const largeDataSet = Array(1000000).fill().map((_, i) => i);worker.postMessage(largeDataSet);
}// data-worker.js - 独立的worker文件
self.onmessage = function(e) {const data = e.data;const processedData = data.filter(num => num % 2 === 0); // 过滤偶数self.postMessage(processedData);
};

7. requestAnimationFrame

应用场景:平滑滚动、SVG动画、游戏
问题:使用setTimeout/setInterval实现动画会导致帧率不稳定
解决方案:使用requestAnimationFrame实现平滑动画

function animateScrollToTop() {const scrollToTop = () => {const currentPosition = window.scrollY;if (currentPosition > 0) {window.scrollTo(0, currentPosition - Math.max(20, currentPosition / 10));requestAnimationFrame(scrollToTop);}};requestAnimationFrame(scrollToTop);
}// 绑定到返回顶部按钮
document.getElementById('back-to-top').addEventListener('click', animateScrollToTop);

8. 循环优化

应用场景:处理大量数据(如表格渲染、数据分析)
问题:循环中重复计算数组长度影响性能
解决方案:提前缓存数组长度

// 未优化:每次循环都计算array.length
for (let i = 0; i < array.length; i++) {// 处理逻辑
}// 优化:缓存数组长度
const length = array.length;
for (let i = 0; i < length; i++) {// 处理逻辑
}// 更简洁的写法(适用于不需要逆向遍历的场景)
for (let i = array.length; i--;) {// 处理逻辑(注意循环方向是从后往前)
}

9. Map替代对象进行高效查找

应用场景:需要频繁查找数据的场景(如用户信息查询、配置项读取)
问题:使用对象进行大量查找操作时性能较差
解决方案:使用Map数据结构提高查找效率

// 使用对象存储用户信息
const usersObj = {'1001': { name: '张三', age: 25 },'1002': { name: '李四', age: 30 },'1003': { name: '王五', age: 28 }
};// 使用Map存储用户信息
const usersMap = new Map();
usersMap.set('1001', { name: '张三', age: 25 });
usersMap.set('1002', { name: '李四', age: 30 });
usersMap.set('1003', { name: '王五', age: 28 });// 查找操作对比
console.time('Object查找');
console.log(usersObj['1002']); // 输出: { name: '李四', age: 30 }
console.timeEnd('Object查找'); // 约0.02msconsole.time('Map查找');
console.log(usersMap.get('1002')); // 输出: { name: '李四', age: 30 }
console.timeEnd('Map查找'); // 约0.005ms(性能提升约4倍)

10. CSS硬件加速

应用场景:实现平滑过渡效果(如侧边栏滑入、悬浮动画)
问题:直接修改元素的left/top属性会触发重排
解决方案:使用transform属性触发GPU加速

.sidebar {position: fixed;left: -300px;width: 300px;height: 100%;transition: transform 0.3s ease-out; /* 使用transform替代left */
}.sidebar.open {transform: translateX(300px); /* 触发GPU加速 */
}
// 切换侧边栏状态
document.getElementById('toggle-sidebar').addEventListener('click', () => {document.querySelector('.sidebar').classList.toggle('open');
});

通过这些具体的应用场景,你可以根据项目需求选择合适的优化技术,有效提升网页性能和用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89674.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89674.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89674.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fiddler 中文版 API 调试与性能优化实践 官方中文网全程支持

在现代开发中&#xff0c;性能问题往往是产品上线后最容易被忽视的一环&#xff0c;尤其是API接口性能。一旦接口响应时间过长或在高并发场景下出现性能瓶颈&#xff0c;可能直接影响用户体验和系统稳定性。对于开发者来说&#xff0c;如何精确地找到瓶颈所在&#xff0c;如何模…

嵌入式硬件篇---机械臂运动学解算(3自由度)

实际 3 自由度机械臂的解算是机器人控制的核心&#xff0c;涉及运动学正解&#xff08;关节角度→末端位姿&#xff09;和逆解&#xff08;目标位姿→关节角度&#xff09;。以下从结构建模、解算方法、代码实现和应用场景四个维度详细展开&#xff0c;结合工业级机械臂的典型场…

在摄像机视图中想像在普通 3D 视口里那样随意移动

有两条最常用的方法&#xff1a;1. 「锁定相机到视图」(Lock Camera to View)步骤进入相机视图&#xff1a;按 Numpad 0&#xff08;若无数字键盘&#xff0c;可在 Edit → Preferences → Input 勾选 Emulate Numpad 后用主键盘 0&#xff09;。右侧呼出 N 面板&#xff0c;切…

An End-to-End Attention-Based Approach for Learning on Graphs NC 2025

NC 2025 | 一种基于端到端注意力机制的图学习方法 Nature Communications IF=15.7 综合性期刊 1区 参考:https://mp.weixin.qq.com/s/cZ-d8Sf8wtQ9wfcGOFimCg 今天介绍一篇发表在 Nature Communications 的图学习论文《An end-to-end attention-based approach for learnin…

【牛客刷题】小红的数字串

文章目录 一、题目描述 1.1 输入描述 1.2 输出描述 1.3 示例1 二、高效解法 2.1 核心算法设计 2.2 算法设计理念 2.2.1 算法流程详解 2.2.2 复杂度分析 2.3 算法优势分析 2.3.1 关键优化点 2.3.2 正确性验证 2.4 边界处理 2.5 总结与扩展 一、题目描述 小红拿到了一个数字串(由…

微算法科技技术创新,将量子图像LSQb算法与量子加密技术相结合,构建更加安全的量子信息隐藏和传输系统

随着信息技术的发展&#xff0c;数据的安全性变得尤为重要。在传统计算模式下&#xff0c;即便采用复杂的加密算法&#xff0c;也难以完全抵御日益增长的网络攻击威胁。量子计算技术的出现为信息安全带来了新的解决方案。然而&#xff0c;量子图像处理领域仍面临复杂度高、效率…

博客摘录「 Springboot入门到精通(超详细文档)」2025年7月4日

1.Spring Boot返回Json数据及数据封装1. Controller 中使用RestController注解即可返回 Json 格式的数据首先看看RestController注解包含了什么东西&#xff0c; ResponseBody 注解是将返回的数据结构转换为 Json 格式Target({ElementType.TYPE}) Retention(RetentionPolicy.RU…

企业安全防护:堡垒机技术解析

目录 一、堡垒机&#xff1a;企业IT运维的安全守门人 1.1 核心价值矩阵 1.2堡垒机典型部署架构 二、堡垒机如何构建安全防线 2.1 四层防护体系 2.2 关键工作流程 三、堡垒机关键技术指标对比表 四、智能堡垒机的发展趋势 一、堡垒机&#xff1a;企业IT运维的安全守门人…

传输层协议 TCP

TCP 协议TCP 全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制TCP 协议段格式源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去32 位序号/32 位确认号4 位 TCP 报头长度: 表示该 TCP 头部有多少个 32 位 bit…

RT-Thread的概念和移植

一、操作系统的概念 操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境&#xff0c;操作系统可以…

基于单片机倾角测量仪/角度测量/水平仪

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 本设计实现了一种基于单片机的高精度数字倾角测量仪。系统核心由倾角传感器&#xff08;ADXL345倾…

深度学习 -- 初步认识Torch

深度学习 – 初步认识Torch 文章目录深度学习 -- 初步认识Torch一&#xff0c;认识人工智能1.1 人工智能的本质1.2 人工智能的实现过程二&#xff0c;认识Torch2.1简介2.2 概述2.3 Tensor的创建2.3.1 torch.tensor2.3.2 torch.Tensor三&#xff0c;创建线性和随机张量3.1创建线…

BGP的“聪明选路”遇上了TCP的“路径洁癖”,需人工调和

在路由器R1上有两条外网&#xff0c;WAN1和WAN2。R1上做了域名分流功能&#xff0c;全局网址分到WAN1&#xff0c;指定域名分到WAN2&#xff08;优先级更高&#xff09;。症状是用户反馈部分网页无法打开。于是各种检查尝试...... 2天过去了......最终结论是&#xff1a;即使S…

ACWing算法笔记 | 二分

&#x1f50d; C 二分查找双模板详解&#xff1a;左闭右开 vs 左闭右闭&#xff08;二分笔记&#xff09;二分查找&#xff08;Binary Search&#xff09;是一类高效的搜索算法&#xff0c;在 O(log n) 的时间复杂度下查找答案&#xff0c;适用于单调性问题。C STL 的 lower_bo…

centos 新加磁盘分区动态扩容

你不能直接将一个分区分配给/dev/mapper/centos-root&#xff0c;因为这是一个逻辑卷&#xff08;属于 LVM 系统&#xff09;。不过&#xff0c;你可以通过以下步骤将/dev/sda3添加到现有卷组或创建新的逻辑卷&#xff1a; 确认磁盘和分区信息 首先检查分区是否已格式化以及是否…

python学智能算法(二十六)|SVM-拉格朗日函数构造

【1】引言 前序学习进程中&#xff0c;已经了解了拉格朗日乘数法求极值的基本原理&#xff0c;也了解了寻找最佳超平面就是寻找最佳分隔距离。 这篇文章的学习目标是&#xff1a;使用拉格朗日乘数法获取最佳的分隔距离。 【2】构造拉格朗日函数 目标函数 首先是目标函数f&a…

智能制造——48页毕马威:汽车营销与研发数字化研究【附全文阅读】

涵盖了汽车行业数字化转型、汽车营销业务能力建设&#xff08;以会员管理为例&#xff09;以及汽车研发与创新能力建设等议题。毕马威认为&#xff0c;软件定义汽车已成为汽车行业中的核心议题&#xff0c;并围绕此议题提供了相关方案。在市场观点方面&#xff0c;毕马威与多家…

嵌入式学习-PyTorch(8)-day24

torch.optim 优化器torch.optim 是 PyTorch 中用于优化神经网络参数的模块&#xff0c;里面实现了一系列常用的优化算法&#xff0c;比如 SGD、Adam、RMSprop 等&#xff0c;主要负责根据梯度更新模型的参数。&#x1f3d7;️ 核心组成1. 常用优化器优化器作用典型参数torch.op…

PostgreSQL实战:高效SQL技巧

PostgreSQL PG 在不同领域可能有不同的含义,以下是几种常见的解释: PostgreSQL PostgreSQL(简称 PG)是一种开源的关系型数据库管理系统(RDBMS),支持 SQL 标准并提供了丰富的扩展功能。它广泛应用于企业级应用、Web 服务和数据分析等领域。 PostgreSQL 的详细介绍 Po…

3-大语言模型—理论基础:生成式预训练语言模型GPT(代码“活起来”)

目录 1、GPT的模型结构如图所示 2、介绍GPT自监督预训练、有监督下游任务微调及预训练语言模型 2.1、GPT 自监督预训练 2.1.1、 输入编码&#xff1a;词向量与位置向量的融合 2.1.1.1、 输入序列与词表映射 2.1.1.2、 词向量矩阵与查表操作 3. 位置向量矩阵 4. 词向量与…