小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
前端性能优化,这也算是一个老生常谈的面试题了。影响前端性能主要有这几个方面:网络请求(http
请求)、css
优化、页面渲染、js执行
、缓存、图片等等...
优化方式
-
减少
http
请求次数 合并css
、js
代码、静态资源图片,可以使用雪碧图 -
减少
http
请求的大小 减少没必要的图片、js
、css
;使用gzip
压缩资源文件大小;对代码进行压缩、移除注释;压缩静态资源图片 -
将
css
和js
放到外部文件中,避免直接使用style
和script
标签 在HTML
文件上引用外部资源可以有效利用浏览器的静态资源缓存。 -
避免空的
href
和src
当<link>
标签的href
属性为空,或<script>
、<img>
、<iframe>
标签的src
属性为空时,浏览器在渲染过程中仍会将href
属性或者src
属性中的空内容进行加载,直至加载失败,这样就阻塞了页面中其他资源的下载进程,而且最终加载到的内容是无效的 -
为
HTML
指定Cache-Control
或Expires
为HTML
内容设置Cache-Control
或Expires
可以将HTML
内容缓存起来,避免频繁向服务器端发送请求,在页面中的Cache-Control
或Expires
头部有效时,浏览器将直接从缓存中读取内容,不再向服务器端发送请求
<meta http-equiv="Cache-Control" content="max-age=8200">
<meta http-equiv="Expires" content="Tue, 21 Sep 2021 13:04:03 GMT">
- 合理设置
Etag
和Last-Modified
合理设置Etag
和Last-Modified
使用浏览器缓存,对于未修改的文件,静态资源服务器会向浏览器端返回304
,让浏览器从缓存中读取文件,减少Web
资源下载的带宽消耗并降低服务器负载
<meta http-equiv="last-modified" content="Tue, 21 Sep 2021 13:04:03 GMT">
-
减少页面重定向
-
合理使用
CDN
来存储文件 -
消除阻塞渲染的
CSS
及JavaScript
对于页面中加载时间过长的CSS
或JavaScript
文件,需要进行合理拆分或延后加载,保证关键渲染路径的资源能快速加载完成 -
异步加载
JavaScript
资源
<script src="main.js" defer></script>
<script src="main.js" async></script>
- 把
CSS
资源引用放到HTML
文件顶部DOM
解析和CSS
解析是两个并行的进程,因此CSS
加载不会阻塞DOM
树的解析!
渲染树是依赖于 DOM
树和 CSSOM
树的,所以无论 DOM
树是否已经完成,它都必须等到 CSSOM
构建完成,即 CSS
加载完成(或失败)后,才能开始渲染。因此, CSS
加载是会阻塞 DOM
树的渲染。
-
JavaScript
资源引用放到HTML
文件底部JavaScript
资源放到HTML文档底部可以防止JavaScript
的加载和解析执行对页面渲染造成阻塞,由于JavaScript
资源默认是解析阻塞的,除非被标记为异步或者通过其他的异步方式加载,否则会阻塞HTML DOM
解析和CSS
渲染过程。 -
尽量预先设定图片等大小 在加载大量的图片元素时,尽量预先限定图片的尺寸大小,否则在图片加载过程中会更新图片的排版信息,产生大量的重排
-
减少
DOM
元素数量和深度HTML
标签越多,层级越深,解析需要消耗的时间越久,所以可能的减少数量和深度
结语
如果这篇文章帮到了你,欢迎点赞👍和关注⭐️。
文章如有错误之处,希望在评论区指正🙏🙏。