前端性能优化

news/2024/12/29 21:53:34/

总结

  • 使用打包工具对代码进行打包压缩
  • 引入css时采用link标签,并放入头部,使其与文档一起加载,减少页面卡顿时间;
  • 尽量减少dom结构的重排重绘
  • 使用css雪碧图,减少网络请求;
  • 对不同分辨率的屏幕采用不同分辨率的图片,防止图片过大导致加载缓慢;
  • 使用懒加载,看不到的内容等需要时再进行加载;
  • 能用css解决的问题不要用js解决,如动画、溢出省略号等;
  • 编码时采用性能高的书写方式,如:
    • 将合并样式分开来书写,效率更高;
    • 重复的样式可以合并;
    • 减少优先级低的css选择器;
    • 需要渲染动画时强制打开GPU加速:transform: translate3d(0, 0, 0);
    • 写循环逻辑时尽量降低时间复杂度,尽量减少使用循环嵌套和递归;
  • 使用缓存技术;
  • CDN加速技术;

以下为性能优化的详细说明:

一、css方面

1. 加载性能

  1. css压缩:使用webpack等工具打包压缩,减少体积。
  2. css单一样式:在需要下边距和左边距的时候,很多时候选择:margin:top 0 bottom 0,但是margin-bottom:bottom;margin-left:left;执行效率更高。
  3. 减少@import,而建议使用link,因为后者在页面加载时一起加载,前者是等待页面加载完成之后再进行加载。

2. 选择器性能

  1. 关键选择器:选择器的最后面的部分为关键选择器。css选择器是从右向左进行匹配的。当使用后代选择器的时候,浏览器会遍历所有子元素来确定是否是指定的元素等等。
  2. 如果规则拥有ID选择器作为其关键选择器,则不要为规则增加标签。过滤掉无关的规则。
  3. 避免使用通配符规则,如果*{},计算次数惊人,只对需要用到的元素进行选择。
  4. 尽量少的使用标签选择器,而使用class。
  5. 了解哪些属性是可以通过继承而来的,然后避免对这些属性重复指定规则。

3. 渲染性能

  1. 慎重使用高性能属性:浮动,定位。
  2. 尽量减少页面的重排和重绘。
  3. 去除控规则,{}。空规则的产生的原因一般来说是为了预留样式。去除这些空规则则无疑能减少css文档体积。
  4. 属性值为0时,不加单位。
  5. 属性值为浮动小数0.***,可以省略小数点之前的0。
  6. 标准化各种浏览器前缀,带浏览器前缀的在前。标准属性在后。
  7. 选择器优先嵌套,尽量避免层级过深。
  8. css雪碧图:同一页面相近部分的小图标,方便使用,减少页面的请求次数,但是同时图片本身不变大,使用时,优劣考虑清楚使用。
  9. 正确使用display的属性,由于display的作用,某一些样式组合会无效,徒增样式体积的同时也影响性能。

4. 可维护性和健壮性

  1. 将具有相同内容的样式抽离出来,整合并通过class在页面中进行使用,提高css的可维护性。
  2. 样式和内容分离,将css代码定义到外部css中。

参考
https://www.yuque.com/cuggz/interview/evfmq3


http://www.ppmy.cn/news/32926.html

相关文章

C语言老题新解16-20 用命令行打印一些图案

文章目录11 打印字母C12 输出国际象棋棋盘。13 打印楼梯,同时在楼梯上方打印两个笑脸。14 输出9*9 口诀。15 有一道题要输出一个图形,然后Very Beautiful。11 打印字母C 11 用*号输出字母C的图案。 讲道理这绝对不该是个新人能整出来的活儿&#xff0c…

用sql计算两个经纬度坐标距离(米数互转)

目录 一、sql示例(由近到远) 二 、参数讲解 三、查询效果 - 距离(公里 / 千米) 四、查询效果 - 距离(米) 五、距离四舍五入保留后2位小数(java) 一、sql示例(由近到远…

ElasticSearch快速入门详解(亲测好用,强烈推荐收藏)

3.快速入门 接下来快速看下elasticsearch的使用 3.1.概念 Elasticsearch虽然是一种NoSql库,但最终的目的是存储数据、检索数据。因此很多概念与MySQL类似的。 ES中的概念数据库概念说明索引库(indices)数据库(Database)ES中可…

selenium(5)-------自动化测试脚本(python)

1)alert框的处理 前提:我们是不可以通过控制台直接定位元素的方式去选中这个alert框的,例如说xpath直接进行定位元素 1)先获得弹框的操作句柄:alertdriver.switch_to.alert 2)再次调用accept方法进行关闭弹窗:alert.accept() from selenium import webdriver import…

Java 到底是值传递还是引用传递?

C 语言是很多变成语言的母胎,包括 Java。对于 C 语言来说,所有的方法参数都是通过 “值” 传递的,也就是说,传递给被调用方法的参数值存放在临时变量中,而不是存放在原来的变量中。这就意味着,被调用的方法…

Github的使用

Github Date: March 8, 2023 Sum: Github的使用 Github 了解开源相关的概念 1. 什么是开源 2. 什么是开源许可协议 开源并不意味着完全没有限制,为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议( Open Sou…

OKHttp 源码解析(二)拦截器

游戏SDK架构设计之代码实现——网络框架 OKHttp 源码解析(一) OKHttp 源码解析(二)拦截器 前言 上一篇解读了OKHttp 的基本框架源码,其中 OKHttp 发送请求的核心是调用 getResponseWithInterceptorChain 构建拦截器链…

每日算法题

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 作为篮球队教练,你需要从以下名单中选出 11 号位至 55 号位各一名球员,组成球队的首发阵容。 每位球员担任 11 号位至 55 号位时的评分如下…