前端css性能优化

前端css性能优化

1. 减少样式表数量和压缩文件大小:
通过合并多个样式表、删除未使用的样式、压缩样式表等方式来减少样式表数量和大小,从而减少网络请求和提高加载速度。

  1. 通常来说,样式文件会被浏览器缓存,进入到其他页面样式文件不用再去下载。一般是样式表数量越少越好,但是如果样式文件偏大,也会影响加载速度,所以需要取舍。如果是大项目,应该合并成不同的样式文件,如果是简单的项目,建议合并成一个文件即可。如果无法确认项目规模,建议分开成不同的样式文件,日后要合并也比较方便。

  2. 浏览器想要渲染出网页必须要先将CSS等文件下载下来,所有文件越小,那么就能够更快的下载和渲染,特别是在一些网络速度比较慢的场景下效果尤为明显。我们可以借助一些打包工具进行压缩,比如webpack、gulp/grunt、rollup等。

2. 不要嵌套过多复杂的选择器:使用尽可能简洁的选择器来匹配元素,避免使用过于复杂的选择器,可以减少匹配时间和提高渲染速度。

如下:
法2的写法,性能更高,因为css选择器是从右到左解析的,法2可以直接获取child,而法1需要先获取所有的child,再获取family下的所有child

/* 法1 */
.family .child {
	font-size: 14xp;
}
/* 法2 */
.child {
	font-size: 14xp;
}

3. 避免使用通配符*选择器:通配符选择器(*)会匹配所有元素,会消耗大量计算资源。尽可能避免使用通配符选择器,或者将其限制在具体的元素或类别上。

4. 使用ID选择器代替类选择器:ID选择器比类选择器更具体,匹配速度更快。在需要使用样式的地方,尽可能使用ID选择器代替类选择器。

5. 避免使用@import:@import会阻塞页面的加载,影响浏览器的并行下载,并且会增加页面的请求次数。使用@import引用的CSS文件只有在引用它的那个css文件被下载、解析之后,浏览器才会知道还有另外一个css需要下载,这时才去下载,然后下载后开始解析、构建render tree等一系列操作,这就导致浏览器无法并行下载所需的样式文件。尽量避免使用@import,或者将其放在样式表的开头。

6. 避免使用过多的浮动:浮动元素会影响其他元素的布局和渲染,如果使用过多的浮动,会导致页面的渲染速度变慢。尽量避免使用过多的浮动,或者使用其他布局方式代替。

7. 使用雪碧图:将多个小图标合并成一个大图,并使用CSS来控制显示区域,可以减少网络请求和提高加载速度。

8. 避免使用!important:!important会覆盖其他所有样式,会增加计算时间和降低渲染速度。尽量避免使用!important,或者将其限制在必要的地方。

9. 使用缩写属性:使用缩写属性可以减少样式表的大小,从而提高加载速度。例如,使用margin代替margin-top、margin-right、margin-bottom、margin-left。

10. 慎用一些需要浏览器计算的CSS属性:
如果某些CSS属性需要浏览器计算,那都是需要耗费一些性能的,比如box-shadow、border-radius、filter、透明度、:nth-child、calc等等,而且除了计算,这些属性也容易造成重绘和重排

如果非必要情况下可以不必使用这些属性,当然,大多数都是必要情况。

11. 利用继承减少代码量:
我们都知道CSS有一些属性是可以继承的,比如color,font-size,font-family等等,但是很多开发人员不注意这种细节,编写很多重复性代码,从而使得CSS文件变得比较大,影响加载速度。

12. 首屏关键css使用内联样式:
网站性能是留住用户的关键,那么网站首屏的加载速度更是关键的关键。

通常我们不会去写内联样式,因为这会造成代码维护困难,而且内联样式浏览器不会缓存的,每次刷新都会重新加载css。

但是,凡事都有两面性,内联CSS能够使页面渲染的开始时间提前,因为在HTML下载完成之后就能渲染了,不像link那样引用样式需要耗费更多时间。

那么,我们是否可以全部使用内联样式呢?答案是否定的,刚刚说了内联样式还是存在许多问题的,所以最好的解决办法就是:首屏关键CSS可以使用内联的形式。

13. 异步加载CSS:
CSS会阻塞渲染,在CSS文件请求、下载、解析完成之前,浏览器将不会渲染任何已处理的内容。

但是,有些CSS文件可能不是我们渲染必须的CSS文件,我们可以让它异步加载,从而提升渲染速度,比如下面两种异步加载CSS的方式:

  1. 使用JavaScript动态创建样式表link元素,并插入到DOM中

    // 创建link标签
    const myCSS = document.createElement( "link" );
    myCSS.rel = "stylesheet";
    myCSS.href = "mystyles.css";
    // 插入到header的最后位置
    document.head.insertBefore( myCSS, document.head.childNodes[ document.head.childNodes.length - 1 ].nextSibling );
    
  2. 修改link标签(有兼容性问题)

    <link rel="preload" href="mystyles.css" as="style" onload="this.rel='stylesheet'">
    

    或者

    <link rel="alternate stylesheet" href="mystyles.css" onload="this.rel='stylesheet'">
    

14. 不要为了速度而放弃了可维护性和可读性:
渲染速度很重要,但是我们在编码过程中,也需要注意代码的可维护性和可读性,比如,不能盲目的为了压缩样式文件的大小,写一些很简单的类名,如a,b,c,d等

15. 减少页面重排、重绘:
页面的重排重绘都会耗费浏览器性能,我们在非必要情况下应该避免,比如下面这些情况。

改变元素的内外边距
CSS伪类激活
能使用background-color,就尽量不要使用background
改变font-size和font-family
当然有些情况我们是不能避免重绘和回流的,我们视情况而定

16.其它优化小点:
慎重使用高性能属性:浮动、定位
去除空规则:{}
属性值为0时,不加单位
将css文件放在页面最上面
尽量少的去对标签进行选择,而是用class
尽量少的去使用后代选择器,降低选择器的权重值。后代选择器的开销是最高的,尽量将选择器的深度降到最低,最高不要超过三层,更多的使用类来关联每一个标签元素
属性值为浮动小数0.**,可以省略小数点之前的0
标准化各种浏览器前缀:带浏览器前缀的在前。标准属性在后
选择器优化嵌套,尽量避免层级过深

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

哪个牌子的超声波清洗器好?精选四大超强超声波清洗机力荐

生活中戴眼镜的人群不在少数&#xff0c;然而要维持眼镜的干净却不得不每次都需要清洗&#xff0c;只是通过手洗的方式实在太慢并且容易操作不当让镜片磨损更加严重&#xff01;所以超声波清洗机就诞生了&#xff01;超声波清洗机能够轻松清洗机眼镜上面的油脂污渍&#xff0c;…

Spire.PDF for .NET【文档操作】演示:在 PDF 中创建目录 (TOC)

目录在增强文档的可读性和可导航性方面起着至关重要的作用。它为读者提供了文档结构的清晰概述&#xff0c;使他们能够快速找到并访问他们感兴趣的特定部分或信息。这对于较长的文档&#xff08;例如报告、书籍或学术论文&#xff09;尤其有价值&#xff0c;因为读者可能需要多…

国产压缩包工具——JlmPackCore SDK说明(二)——JlmPack_Create函数说明

一、JlmPack_Create函数说明 JlmPack_Create函数是创建jlm压缩文件的核心函数&#xff0c;最大允许CATALOG_MAX_LIMIT&#xff08;请参考Config.h&#xff09;个目录&#xff0c;意思是包括文件夹和文件在内&#xff0c;遍历整个列表最大允许CATALOG_MAX_LIMIT个目录对象&#…

【Unity小技巧】Unity字典序列化

字典序列化 在 Unity 中&#xff0c;标准的 C# 字典&#xff08;Dictionary<TKey, TValue>&#xff09;是不能直接序列化的&#xff0c;因为 Unity 的序列化系统不支持非 Unity 序列化的集合类型。可以通过手写字典实现 效果&#xff1a; 实现步骤&#xff1a; 继承ISe…

2024年制冷与空调设备运行操作证模拟考试题库及制冷与空调设备运行操作理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年制冷与空调设备运行操作证模拟考试题库及制冷与空调设备运行操作理论考试试题是由安全生产模拟考试一点通提供&#xff0c;制冷与空调设备运行操作证模拟考试题库是根据制冷与空调设备运行操作最新版教材&#…

振弦采集仪的工程安全监测实践与案例分析

振弦采集仪的工程安全监测实践与案例分析 振弦采集仪是一种常用的工程安全监测仪器&#xff0c;通过测量被监测结构的振动频率与振型&#xff0c;可以实时监测结构的安全状况。本文将结合实践经验和案例分析&#xff0c;探讨振弦采集仪在工程安全监测中的应用。 一&#xff0c…

奔驰G350升级原厂自适应悬挂系统有哪些作用

奔驰 G350 升级自适应悬挂系统后&#xff0c;可根据行车路况自动调整悬架高度和弹性&#xff0c;从而提升驾乘的舒适性和稳定性。 这套系统的具体功能包括&#xff1a; • 多种模式选择&#xff1a;一般有舒适、弯道、运动及越野等模式。例如&#xff0c;弯道模式在过弯时能为…

elk对于集群实例的日志的整合-基于logstash采集日志

说明&#xff1a;基于logstash采集日志 环境&#xff1a; 物理机192.168.31.151 一.启动2个测试实例&#xff0c;每5-10s随机生成一条订单日志 实例一 包位置&#xff1a;/home/logtest/one/log-test-0.0.1-SNAPSHOT.jar 日志位置:/docker/elastic/logstash_ingest_data/l…

塑造卓越企业家IP:多维度视角下的策略解析

在构建和塑造企业家IP的过程中&#xff0c;我们需要从多个维度进行考量&#xff0c;以确保个人品牌能够全面、立体地展现企业家的独特魅力和价值。以下是从不同角度探讨如何做好一个企业家IP的策略。 一、从个人特质出发 深入了解自我&#xff1a;企业家需要清晰地认识到自己的…

树立行业标杆,林清轩获“以油养肤开创者”市场地位认证

从0到1的创造&#xff0c;才能快速实现从1到100的裂变&#xff0c;这是亘古不变的商业逻辑。 6月25日&#xff0c;知名美妆国货品牌林清轩&#xff0c;获得了CIC灼识的市场地位确认书&#xff0c;确定“以油养肤开创者” 的地位。 近两年&#xff0c;以油养肤的概念逐渐兴起&am…

vivado VIO IP核

参考&#xff1a;pg159 VIO&#xff1a;可以模拟输入/输出功能&#xff0c;实时监视和修改FPGA中的信号&#xff0c;用于调试和验证&#xff0c;与ILA相比&#xff0c;VIO无需占用RAM资源。 VIO IP的输出对于FPGA内部逻辑是输入信号&#xff0c;可以在调试界面设置输入值&…

免费管饱不折腾,无公网NAS访问攻略,国产品牌异地自动组网技巧

前言 说起远程桌面、异地组网、内网穿透等等服务&#xff0c;大家脑海中第一反应是哪款产品&#xff0c;确实&#xff0c;现在市面上同类产品不少&#xff0c;但同时支持组网跟穿透的产品几乎没有。节点小宝作为一款创新型的远程管理工具&#xff0c;凭借其使用简单&#xff0…

欧盟《净零工业法案》通过,全球清洁能源市场迎来新格局

2024年5月27日&#xff0c;欧盟理事会正式通过《净零工业法案》&#xff0c;这意味着欧盟在推动工业绿色转型方面迈出了具有决定性的一步。这一法案的通过&#xff0c;不仅对欧盟的净零排放目标具有深远影响&#xff0c;也将对全球清洁能源市场产生重大影响。 《净零工业法案》…

2024年6月27日~2024年7月1日周报

目录 一、前言 二、完成情况 2.1 生成速度模型剖面图 2.2 吴恩达机器学习系列课程 2.2.1 介绍 2.2.1.1 机器学习 2.2.1.2 监督学习 2.2.1.3 无监督学习 2.2.2 单变量线性回归 2.2.2.1 模型表示 2.2.2.2 代价函数 2.2.2.3 梯度下降 2.2.2.4 梯度下降的线性回归 2.…

Java短剧系统

探索影视新体验 &#x1f4f1;一、引言&#xff1a;短剧时代的来临 在数字化的今天&#xff0c;我们见证了许多内容消费模式的转变。从长篇大论的电视剧到短小精悍的短视频&#xff0c;再到如今备受瞩目的短剧&#xff0c;观众对于影视内容的需求越来越多元化。而短剧系统微信…

网络请求的高效处理:C++ libmicrohttpd库详解

一、libmicrohttpd简介 libmicrohttpd是一个小型的C语言库&#xff0c;用于创建HTTP服务器和客户端。它提供了HTTP 1.1协议的完整实现&#xff0c;包括持久连接、管道化请求、虚拟主机等特性。libmicrohttpd的特点是&#xff1a; 轻量级&#xff1a;易于集成到C或C项目中。跨…

DolphinScheduler分布式集群部署指南(小白版)

官方文档地址&#xff1a;https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 DolphinScheduler简介 摘自官网&#xff1a;Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流…

深入理解计算机系统 CSAPP 8.4.2 fork函数

//fork.c #include <sys/types.h> #include <unistd.h> #include <stdio.h>int main() {pid_t fpid; //fpid表示fork函数返回的值int count 0;fpid fork();if (fpid < 0)printf("error in fork!");else if (fpid 0) {printf("\ni am th…

线性图标设计

创建图标区域 按键A&#xff0c;创建一个24x24的背景。 图标绘制包含几个点 矢量图形绘制&#xff1a;箭头、圆、三角...... 绘制箭头和矩形 1.下载图标 双击矩形选中要删除的点 调整一下即可得到下载的图标。 2.时间图标 按快捷键O画个圆&#xff0c;L加两条线变成一个时钟…