CSS 提高性能的方法,并提供一些实用的技巧和代码示例
CSS 是前端开发中不可或缺的一部分,它负责网页的样式和布局。随着网站规模和复杂度的增加,CSS 的性能也变得越来越重要。本文将介绍 CSS 提高性能的方法,并提供一些实用的技巧和代码示例。
- 使用压缩后的 CSS 文件
压缩 CSS 文件可以减小文件大小,加快加载速度。常见的 CSS 压缩工具有 YUI Compressor 和 CSSNano 等。使用这些工具能够有效地删除不必要的空格、注释和换行符,使得 CSS 文件更加紧凑。同时,在使用 CSS 时,应该尽量避免重复的代码和选择器,以减小文件大小。
- 减少浏览器重绘和回流
当页面元素的尺寸、样式或位置发生变化时,浏览器会重新计算并重新渲染这些元素,这个过程称为“重绘”和“回流”。重绘和回流会消耗大量的 CPU 时间和内存,从而降低页面性能。为了减少重绘和回流,可以采用以下策略:
- 尽量减少 DOM 操作:DOM 操作是导致回流的主要原因之一。因此,应该尽量减少 DOM 操作的频率和复杂度。例如,可以将多个 DOM 操作合并成一个操作,或者使用 DocumentFragment 等缓存对象进行 DOM 操作。
- 使用 translate() 替代 top 和 left:在移动元素时,应该尽量使用 transform 属性中的 translate() 方法,而不是直接设置 top 和 left 属性。因为使用 translate() 不会导致回流,而直接设置 top 和 left 则会导致回流。
- 使用 position: absolute 或 fixed:使用 position: absolute 或 fixed 可以使得元素脱离文档流,从而减少重绘和回流。
- 将 CSS 放在 head 中
将 CSS 放在 head 中可以让浏览器尽早下载和解析 CSS 文件,从而加快页面加载速度。同时,将 CSS 放在 head 中也可以防止出现渲染延迟的问题。例如,在使用 WebFont 时,如果将 @font-face 规则放在 body 中,可能会导致字体闪烁或者出现系统字体的瞬间。
- 使用雪碧图或 SVG 图标
使用雪碧图或 SVG 图标可以减少 HTTP 请求次数,从而加快页面加载速度。雪碧图是一种将多张小图片合并成一张大图片的技术,而 SVG 图标是一种矢量图形格式,可以随意调整大小而不失真。为了使用雪碧图和 SVG 图标,可以采用以下策略:
- 使用 CSS Sprite Generator 生成雪碧图:CSS Sprite Generator 是一种在线工具,可以将多个小图片合并成一张大图片,并自动生成相应的 CSS 代码。这样,不仅减少了 HTTP 请求次数,还可以提高代码的可读性和维护性。
- 使用 SVG 图标库:在使用 SVG 图标时,可以使用 SVG 图标库,如 Font Awesome、Iconic 等,它们提供了大量的矢量图标和相应的 CSS 样式。这样,不仅减少了 HTTP 请求次数,还能够提高图标的可定制性和样式一致性。
- 使用 CSS 动画和过渡
使用 CSS 动画和过渡可以使得页面更加生动和有趣,而不需要使用 JavaScript。同时,CSS 动画和过渡也比 JavaScript 动画更加流畅和节省资源。对于 CSS 动画和过渡,可以采用以下策略:
- 尽量使用 GPU 加速:使用 GPU 加速可以显著提高动画和过渡的性能,因为 GPU 可以并行处理多个任务。为了使用 GPU 加速,需要使用 translate3d()、scale3d() 和 rotate3d() 等变形函数,或者使用 will-change 属性来声明即将进行的变换。
- 使用 requestAnimationFrame 替代 setTimeout:requestAnimationFrame 是一种在下一帧绘制前调用的 API,可以避免出现卡顿和掉帧的问题。为了使用 requestAnimationFrame,可以替代 setTimeout 或 setInterval,并在每一帧绘制前调用相应的函数。
- 合理使用 CSS 预处理器
CSS 预处理器(如 Sass、Less 等)可以提高 CSS 的可复用性、可维护性和可扩展性。同时,CSS 预处理器也可以通过变量、混合器、函数等功能,减少重复的代码和选择器,从而减小 CSS 文件大小。为了合理使用 CSS 预处理器,需要注意以下几点:
- 尽量避免嵌套层数过深:过深的嵌套会导致生成的 CSS 代码冗长和难以维护。因此,应该尽量减少嵌套层数,保持代码的简洁和易读。
- 将通用样式抽象成混合器或函数:通用样式(如清除浮动、文本省略等)可以抽象成混合器或函数,以减小 CSS 文件大小,并使得代码更加精简和可维护。
- 使用条件语句定制样式:使用条件语句可以根据不同的情况,生成不同的样式表,以定制化页面的样式和布局。例如,可以根据不同的屏幕分辨率,生成不同的响应式样式表。
- 使用合适的选择器
CSS 选择器是 CSS 中最重要的部分之一,它决定了哪些元素应用哪些样式。为了提高页面性能,应该尽量使用高效的选择器,以减少样式匹配和渲染的时间。以下是一些选择器的性能比较:
- ID 选择器(#id):ID 选择器是最快的选择器,因为 ID 是唯一的,不需要查找其他元素。
- 类选择器(.class):类选择器的速度比标签选择器稍慢,因为它需要查找所有具有相应类名的元素。但是,类选择器的代价比较小,可以大量使用。
- 标签选择器(tag):标签选择器是最慢的选择器,因为它需要查找所有相应的元素。因此,应该尽量避免使用标签选择器,尤其是在嵌套层数较深的情况下。
除了上述选择器,还有伪类选择器、属性选择器等,它们的速度也各不相同。因此,在编写 CSS 时,应该尽量使用高效的选择器,避免不必要的样式匹配和渲染。
结论
在这篇文章中,我们介绍了 CSS 提高性能的方法,其中包括使用压缩的 CSS 文件、减少浏览器重绘和回流、将 CSS 放在 head 中、使用雪碧图或 SVG 图标、使用 CSS 动画和过渡、合理使用 CSS 预处理器以及使用高效的选择器。这些方法都可以帮助我们提高页面性能,使得网站更加快速、流畅和优雅。
相关文章:
CSS 提高性能的方法,并提供一些实用的技巧和代码示例
CSS 是前端开发中不可或缺的一部分,它负责网页的样式和布局。随着网站规模和复杂度的增加,CSS 的性能也变得越来越重要。本文将介绍 CSS 提高性能的方法,并提供一些实用的技巧和代码示例。 使用压缩后的 CSS 文件 压缩 CSS 文件可以减小文件…...

程序员:面试造火箭,入职拧螺丝?太难了···
刚开始工作的时候,我也想不通这个问题,甚至很鄙视这种现象。后面当了面试官,做到了公司中层管理,也会站在公司以及行业角度去重新思考这个问题。 为什么这种现象会越来越普遍呢?尤其在 IT 行业愈加明显。 面试看的是…...

pg事务:隔离级别历史与SSI
事务隔离级别的历史 ANSI SQL-92定义的隔离级别和异常现象确实对数据库行业影响深远,甚至30年后的今天,绝大部分工程师对事务隔离级别的概念还停留在此,甚至很多真实的数据库隔离级别实现也停留在此。但后ANSI92时代对事物隔离有许多讨论甚至…...
【滑动窗口】【单调队列】个人练习-Leetcode-2373. Largest Local Values in a Matrix
题目链接:https://leetcode.cn/problems/largest-local-values-in-a-matrix/ 题目大意:给出一个N*N矩阵,要求做池化操作,选出每个3*3矩阵的最大值,返回一个(N-2)*(N-2)矩阵 思路:这是个简单题,…...

工厂蓝牙定位技术的原理、应用场景、优势及潜在问题
蓝牙定位技术是近年来在工业领域中得到广泛应用的一项技术。随着工业自动化的快速发展和物联网技术的普及,工厂蓝牙定位成为了提高生产效率、优化生产流程和管理的重要工具。本文将详细介绍工厂蓝牙定位技术的原理、应用场景以及其在工业生产中的优势。 首先&#x…...

Linux内核模块编程
访问【WRITE-BUG数字空间】_[内附完整源码和文档] 1 总体设计思路 Linux内核是单体式结构,相对于微内核结构而言,其运行效率高,但是系统的可维护性和可扩展性较差。为此,Linux提供了内核模块(module)机制&…...

每日一练 | 网络工程师软考真题 Day8
1、某客户端采用ping命令检测网络连接故障时,发现可以ping通127.0.0.1及本机的IP地址,但无法ping通同一网段内其他工作正常的计算机的IP地址。该客户端的故障可能是 。 A.TCP/IP协议不能正常工作 B.本机网卡不能正常工作 …...
springBoot如何【禁用Swagger】
需求: 生产环境下,需要关闭swagger配置,避免接口暴露。 方法: 1、使用注解Value() 2、使用注解Profile({“dev”,“test”}) 表示在开发或测试环境开启,而在生产关闭。 3、使用注解ConditionalOnProperty(name “s…...

数据库原理及应用上机(实验四 SQL连接查询)
✨作者:命运之光 ✨专栏:数据库原理及应用上机实验 目录 ✨一、实验目的和要求 ✨二、实验内容及步骤 ✨三.实验结果 ✨四、实验总结 🍓🍓前言: 数据库原理及应用上机实验报告的一个简单整理后期还会不…...

linux上使用系统安装和Docker安装mysql的两种方式
一、安装到linux 1、安装mysql-server 1、在安装之前查看下系统是否已经安装了mysql ls /usr/share2、安装mysql-server sudo apt-get install mysql-server3、再次查看,发现多了个mysql ls /usr/share | grep mysql //在ls打印结果中搜索mysql关键字4、登陆 在…...
解决Mac下载官网JDK速度过慢的问题
换了新电脑,用mac完去官网下载jdk,发现速度过于慢,要等非常久,为了解决这个问题,提供一个方法:将mac的网络换成手机热点,接着再去官网下载jdk1.8,速度快的飞起。 jdk1.8下载的链接&a…...
笔记本wifi与台式机、内网服务器共网、共享wifi详细教程
内容包括两个部分: 笔记本、台式机共网,笔记本连接WiFi,台式机通过网线连接笔记本电脑;笔记本、服务器共网,笔记本连接WiFi,服务器通过网线连接笔记本电脑。 1)稍微简单易操作,2&am…...
纵观人类发展史,我发现了一个秘密!
文 / 高扬(微信公众号:量子论) 纵观人类的历史,就是工具化日益增强的历史。通过创新工具、解放生产力,人类从茹毛饮血到现在设计模型驾驭人工智能,一路从刀耕火种走到信息时代。 远古时期,人们偶…...

HDFS的数据流
1.HDFS写数据流程 (1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。 (2)NameNode返回是否可以上传。 (3)客户端…...

[230531] 托福听力真题|TPO67配套词汇|10:23-11:23
目录 Con1 Lec1(ecology) Lec2(psychology) Con2 Lec3(art history) 重点复习巩固lecture 两篇Con都为简单等级 Con1 emergency n 紧急情况;突发情况 deal with 处理 dormitory n 宿舍 facility n 设备 supervisor n 监督…...

每日学术速递5.21
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Going Denser with Open-Vocabulary Part Segmenta 标题:通过开放式词汇部分分割变得更密集 作者:Peize Sun, Shoufa Chen, Chenchen Zhu, Fanyi Xiao, Pi…...

【SpringBoot】SpringBoot 纯后端项目如何自定义异常页面(Whitelabel Error Page)
文章目录 背景安排方案步骤 验证 背景 一个短链服务,业务将长链接给我,我转换成短地址,用户访问短地址时,我再做redirect;没有前端,纯后端项目短链会有过期时间,过期后将返回错误信息某一天一个…...

Netty核心技术三--NIO编程
1. JAVA NIO基本介绍 Java NIO 全称 java non-blocking IO,是指 JDK 提供的新API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的 NIO 相关类都被放在 java.nio 包及子包下&…...
机器人的运动范围:DFS
Problem: 剑指 Offer 13. 机器人的运动范围 文章目录 思路解题方法复杂度Code 思路 首先定义好地图,上下左右四个方向也就是{{1,0},{0,1},{-1,0},{0,-1}},然后我们另外定义一个方法来判断题目要求的下标位数和是否大于k, boolean check(int x…...
Rshiny编写ui中具有web依赖项的控件{该问题的具体阐述请看引言}
Rshiny编写ui中具有web依赖项的控件{该问题的具体阐述请看引言} 引言conditionalPanel函数update*函数系列总结引言 问题说明:在汇报的过程中我们想添加具有web依赖项的控件,比如ui中有两个控件:第一个控件标签为m,其取值为:1、2;第二个控件标签为m0,m0的取值依赖于m,即…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...