分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

CSS性能优化

发布时间:2023-09-06 01:34责任编辑:傅花花关键词:CSS性能优化

相信在大家平常开发页面的时候,UI给你的PSD总是各种奇葩字体,PM的特殊需求,2M的背景图片,懒加载窗口抖动,以及烦心的代理网速来加载CSS。

有种拿刀先去砍UI再砍PM的冲动(开个小玩笑)。

网速快的人可能感觉不出来,但是有些网速慢的就不一样了。CSS可能托管的网站有问题,请求半分钟也是有可能的。

众所周知,CSS的加载会阻塞浏览器渲染或是引起浏览器重绘,目前业界普遍推荐把CSS放到<head>中,防止在CSS还没加载完,DOM就已经绘制出来了,造成CSS加载完成后的重绘。那在现代浏览器中我们有没有办法提高首屏渲染速度那?

字体文件没加载出来,无法进行渲染;

 1 <html> 2 <head> 3 ??<!-- headStyle.css中存在字体文件webfont.woff2 --> 4 ??<link rel="stylesheet" type="text/css" href="/Style.css"> 5 </head> 6 <body> 7 ??<p>Text</p> 8 ??<link rel="stylesheet" type="text/css" href="/bodyStyle.css"> 9 </body>10 </html>

浏览器是从上往下解析HTML文档,当发现Style.css的时候,停止解析HTML,下载Style.css,Style.css发现webfont.woff2后进行下载,并继续解析CSS StyleSheet,解析完毕后继续解析HTML,发现P标签后进行渲染,当浏览器发现bodyStyle.css时,就会下载Style.css,解析CSS,然后更新CSSStyleSheet,这时会引起一次重绘。当字体下载完毕的时候也会引起一次重绘。

这个过程中,有两个非常严重的问题。一、如果Style.css文件很大,浏览器需要解析很多行CSS后才能还有个字体文件需要下载,其实此时已经很晚了,字体下载时间稍长一点,就会出现我前面截图提到的问题。二、bodyStyle.css中如果存在p标签对应的样式,那p标签的样式会在bodyStyle.css解析完成后,改变一次样式,很影响体验。
 
第一个方法:减少CSS下载时间;
预解析DNS,提前解析CSS文件所在域名的DNS。
<link rel="preload" href="/webfont.woff2" as="font">

Preload

因为CSS已经在head里了,不需要再加Preload了;但是css中用到的字体文件,一定要在所有css之前preload上;

主页的CSS内联,非必要CSS异步加载;

function LoadStyle(url) { ?try { ???document.createStyleSheet(url) ?} catch(e) { ???var cssLink = document.createElement(‘link‘); ???cssLink.rel = ‘stylesheet‘; ???cssLink.type = ‘text/css‘; ???cssLink.href = url; ???var head = document.getElementsByTagName(‘head‘)[0]; ???head.appendChild(cssLink) ?}}

  如果你使用webpack,使用import函数,官网教程在这里:https://doc.webpack-china.org

// 在index.js模块中直接引入cssimport ‘style.css‘

  

// 在需要index.js模块的地方improt(‘path-of-index.js‘).then(module => {})

  webpack打包后,其实是把style.css打包进了index.js,在异步加载a.js的时候,会将style.css中的代码插入haed标签中。

<!DOCTYPE html><html><head> ?<meta charset="utf-8"> ?<title>Faster</title> ?<link rel="dns-prefetch" href="//cdn.cn/"> ?<link rel="preload" href="//cdn.cn/webfont.woff2" as="font"> ?<link rel="preload" href="//cdn.cn/Page1-A.js" as="script"> ?<link rel="preload" href="//cdn.cn/Page1-B.js" as="script"> ???<link rel="prefetch" href="//cdn.cn/Page2.js"> ?<link rel="prefetch" href="//cdn.cn/Page3.js"> ?<link rel="prefetch" href="//cdn.cn/Page4.js"> ?<style type="text/css"> ???/* 首页用到的CSS内联 */ ?</style></head><body><script type="text/javascript" src="//cdn.cn/Page1-A.js" defer></script><script type="text/javascript" src="//cdn.cn/Page1-B.js" defer></script></body></html>

  本篇只是加入了CSS和字体,我心中终极完美的页面HTML结构就是这样了

CSS性能优化

原文地址:https://www.cnblogs.com/yuanziwen/p/8185118.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved