前端项目性能优化(详细)

ops/2024/12/20 7:31:46/

前端项目的性能优化可以从多个方面进行,包括减少页面重绘和回流、优化加载速度、图片优化、代码优化等。

减少页面重绘和回流

  1. 减少重绘和回流‌:重绘(repaint)是指当元素样式改变但不影响布局时,浏览器只需重新绘制受影响的部分;回流(reflow)是指当DOM结构或样式发生改变,浏览器需要重新计算元素的几何属性并重新布局页面。减少重绘和回流的方法包括:
    • 避免使用CSS属性的快捷方式,如使用border-widthborder-styleborder-color而不是border,因为快捷方式会将所有值初始化为“初始值”,导致更多的重绘和回流‌。
    • 使用transformfilterwill-changeposition:fixed等属性来触发GPU硬件加速,提高动画性能‌。
    • 通过更改className批量修改元素样式,避免直接操作样式属性‌。
    • 将复杂的动画元素定位为fixedabsolute以防止回流‌。
    • 使用DocumentFragment进行一次性创建多个DOM节点‌。

优化加载速度

  1. 减少HTTP请求‌:通过合并图片、CSS样式表和JS脚本,减少HTTP请求次数。例如:
    • 合并图片‌:将相似的图片合并为一张大图,使用精灵图或雪碧图技术,利用浏览器缓存提升性能‌。
    • 合并压缩CSS和JS‌:将相似或通用的CSS和JS文件进行合并,压缩后减少资源文件的大小,从而提升网页加载速度‌。
    • 去掉不必要的请求‌:清理无效的链接,减少HTTP请求次数‌。
    • 首屏加载优化‌:优化首屏的加载,使得页面能够快速显示,提高用户对页面速度的感知‌。
    • 充分利用缓存‌:设置合适的缓存策略,减少向服务器的请求次数,加速页面加载速度‌。
    • 预加载和异步加载‌:对于大型资源页面,使用预加载和异步加载第三方资源,提前缓存资源并展示Loading界面‌。

图片优化

  1. 选择合适的图片格式‌:使用PNG格式的图片,并进行压缩优化。小图使用base64编码,多个图标合并到一张图中,照片使用JPEG或WebP格式‌。
  2. 延迟加载图片‌:使用延迟加载技术,只加载用户滚动到视窗内的图片‌。
  3. 避免空src属性‌:避免在img、iframe等标签中使用空的src属性,因为这会重新加载当前页面‌。
  4. 避免使用DataURL‌:因为DataURL图像没有使用图像压缩算法,文件会变得很大,加载速度慢‌。

代码优化

  1. HTML性能优化‌:将JS移到HTML底部加载,减少对页面显示的阻塞。避免使用iframe,因为会增加HTTP请求。使用语义化的HTML标签,如header、footer、section等,提高代码的可读性和维护性‌。
  2. CSS性能优化‌:尽量减少重绘和回流次数。使用子选择器和后代选择器时不要嵌套过深。利用继承减少重复样式定义。使用CSS Sprites技术减少图标请求次数‌。
  3. JS性能优化‌:使用懒加载只加载当前屏的资源。对于频繁操作的DOM,使用DocumentFragment减少回流和重绘。使用节流和防抖技术降低函数调用频率‌。

http://www.ppmy.cn/ops/143414.html

相关文章

微服务设计原则——功能设计

文章目录 1.ID生成2.数值精度3.DB操作4.性能测试5.版本兼容5.1 向旧兼容5.2 向新兼容 6.异步时序问题7.并发问题7.1 并发时序7.2 并发数据竞争 参考文献 1.ID生成 在分布式系统中,生成全局唯一ID是非常重要的需求,因为需要确保不同节点、服务或实例在并…

MySQL迁移SQLite 借助PYTHON脚本

使用 Python 脚本将 MySQL 数据库迁移到 SQLite 是一种灵活且强大的方法。 下面是一个基本的脚本示例,使用 pandas 和 sqlite3 库来实现这一过程。 这个脚本假设你已经安装了 pandas 和 mysql-connector-python 库。 步骤 安装必要的库: 如果尚未安装&#xff…

【自动驾驶】单目摄像头实现自动驾驶3D目标检测

🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 概述算法介绍演示效果图像推理视频推理 核心代码算法处理过程使用方式环境搭建下载权重文件pytorch 推理(自动选择CPU或GPU&#x…

HTML基本标签详解

HTML基本标签详解 HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础&#xff0c;以下是一些常用的 HTML 基本标签及其详细说明&#xff1a; <html> 定义&#xff1a;整个 HTML 文档的根元素。示例&#xff1a;<html lang"zh"><head> …

白话java设计模式

创建模式 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a; 就是一次创建多次使用&#xff0c;它的对象不会重复创建&#xff0c;可以全局来共享状态。 工厂模式&#xff08;Factory Method Pattern&#xff09;&#xff1a; 可以通过接口来进行实例化创建&a…

排序算法进一步总结

归并排序 (Merge Sort) 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法 (Divide and Conquer) 的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&#xff0c;…

美的集团后端实习面试

前言 碎碎念没必要看 不过&#xff0c;hr还有面试官都很好&#xff0c;面试官也不严厉&#xff0c;虽然没开摄像头&#xff0c;但是面起来很舒服&#xff0c;然后面试官感觉就像是跟同龄人聊天一样&#xff0c;很可爱的小姐姐&#x1f603;。~~ 流程啥的就不说了&#xff0c;…

C++算法第十一天

本篇文章我们继续学习动态规划 第一题 题目链接 题目解析 代码原理 代码编写 class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m obstacleGrid.size(), n obstacleGrid[0].size(); //建表 vector<v…