整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

10条影响CSS渲染速度的写法与建议

、*{} #zishu *{} 尽量避开

由于不同浏览器对HTML标签的解释有差异,所以最终的网页效果在不同的浏览器中可能是不一样的,为了消除这方面的风险,设计者通常会在CSS的一个始就把所有标签的默认属性全部去除,以达到所有签标属性值都统一的效果。所以就有了*通配符。*会遍历所有的标签;

*{margin:0; padding:0}

●建议的的解决办法:

不要去使用生僻的标签,因为这些标签往往在不同浏览器中解释出来的效果不一样;所以你要尽可能的去使用那些常用的标签;

不要使用*;而是把你常用到的这些标签进行处理;例如:body,li,p,h1{margin:0; padding:0}

2、滤镜的一些东西不要去用

IE的一些滤镜在FIREFOX中不支持,往往写一些效果时你还是使用CSS HACK;而滤镜是一个非常毫资源的东西;特别是一些羽化、阴影和一个前透明的效果;

●建议的解决办法:

能不使用就不要使用,一方面兼容问题;很多效果只能在IE中使用;

就本例而言,如果非要这样在的效果,建议用图片作背景;(只说优化速度,实际应用还是可以小部分用,有人可能会说,用图片还多一个HTTP请求呢,呵呵……)

一个非常好的例子,就是在今年512大地震时,很多网站一夜之间全部变成了灰色,他们只用了一行CSS代码:

body{filter: gray;}

但,你会看会看到这些网页非常的慢,打开后你的CPU也会飙升,不夸张的说,如果你的电脑配置差,干死你也不为过。

3、一个页面上少用绝对定位

绝对定位(position:absolute)是网页布局中很常用到的,特别是作一些浮动效果时,也会让页面看起来非常的酷。但网页中如果使用过多的绝对定位,会让你的网页变得非常的慢,这一点上边FIREFOX表现要比IE还要差。

●建议的解决办法:

尽可能少用,这个少用的值是多少,也没有一个非常好的值来说明;还要看绝定定位这个标签里边的内容的多少;在这里我只能说,这样写会有性能问题,少用。

如果能用变通实现同样的效果,就用变通的办法。

4、background 背景图片的平铺

有些网页的背景或页面中某块的背景通常要用到图片的平铺,平铺后就会有平铺次数的问题,如果是单次还好,如果是多次,就废了。

●建议的作法:

色彩少的图片要作成gif图片;

平铺的图片尽可能大一些,如果是色彩少的GIF图片,图片大一些,实际大小也不会大多少;上边的两个例子就很好的证明,第一个图片非常少,第二个图大较大一些;但速度是非常不一样的;

5、让属性尽可能多的去继承

尽可能让一些属性子可以继承父,而不是覆盖父;

6、CSS的路径别太深

#zishu #info #tool #sidebar h2{ font-size:12px;}

7、能简写的一些就简写

这个对渲染速度没有影响;只是少几个字符;

8、别放空的的class或没有的class在HTML代码中

9、float 的应用

这个东西我的感觉是如果使用不当,百分百有性能问题,而且还非常的大,但实在不知道怎么样能弄一个例子出来;这里只能建议大家如果不是很明白float是怎么工作的,还是少使用为妙。

曾经因为这个把IE干死过,我写过一个例子,虽说和这个没有什么太大的关系:IE之死__原来与CSS有关.

10、合理的布局

为什么这么说呢,合理的布局,可以改变CSS的写法以及渲染过程。

要:在本文中,将重点关注网页的初始渲染,即它从解析 HTML 开始。 我将探索可能导致高渲染时间的问题,以及如何解决它们。

本文分享自华为云社区《页面首屏渲染性能指南-云社区-华为云》,作者:Ocean2022。

我们知道渲染页面是一个将服务器的响应内容翻译成图片的过程。但是,如果你页面的渲染性能比较糟糕的话,可能会带来相对较高的跳出率。

在本文中,我将重点关注网页的初始渲染,即它从解析 HTML 开始。 我将探索可能导致高渲染时间的问题以及如何解决它们。

关键渲染路径(CRP)

关键渲染路径 (CRP) 是浏览器将代码转换为屏幕上可显示像素的过程。 它有几个阶段,其中一些可以并行执行以节省时间,但有些部分必须依次完成。 如下图所示:

首先,一旦浏览器得到响应,它就会开始解析它。 当它遇到依赖项时,它会尝试下载它。 如果它是一个样式表文件,浏览器必须在渲染页面之前完全解析它,这就是为什么 CSS 会阻塞渲染的原因。

如果是脚本,浏览器必须:停止解析,下载脚本,然后运行。 只有在那之后它才能继续解析,因为 JavaScript 程序可以改变网页的内容(尤其是 HTML)。 这就是为什么 JS 会阻塞解析的原因。

完成所有解析后,浏览器将构建文档对象模型 (DOM) 和级联样式表对象模型 (CSSOM)。 将它们组合在一起得到渲染树。 页面的不显示部分不会进入渲染树,因为它只包含绘制页面所需的数据。

倒数第二步是将渲染树进行布局, 这个阶段也称为回流:就是计算每个渲染树节点的每个位置及其大小的地方。

最后一步是绘制。 它会根据浏览器在前一阶段计算得到的数据对像素进行着色。

优化相关结论

因此,根据这一过程,我们在优化性能方面,得出了一些结论。如果你要提升页面初始化渲染的性能,你需要:

  • 减少传输的数据量
  • 减少浏览器必须下载的资源数量(尤其是阻塞的资源)
  • 减小 CRP 的长度

同时,我们会根据下面 3 个指标来衡量优化的效率:

  • FP(First Paint)
  • FCP(First Contentful Paint)
  • FMP(First Meaningful Paint)

除了渲染时间之外,还有其他一些因素也需要考虑。例如,你的页面使用了多少阻塞资源以及下载它们需要多长时间

性能优化策略

鉴于我们在上面得出的结论,我们得出网站性能优化有三种主要策略:

  1. 尽量减少通过网络传输的数据量;
  2. 减少通过网络传输的资源总数;
  3. 缩短关键渲染路径;

1. 减少要传输的数据量

首先,移除所有未使用的部分,例如 JavaScript 中无法访问的函数、带有从不匹配任何元素的选择器的样式以及被 CSS 永远隐藏的 HTML 标签。 其次,删除所有重复项。

然后,我建议建立一个自动压缩过程。 例如,它应该从你的后端服务中删除所有注释(但不是源代码)以及每个不包含附加信息的字符(例如 JS 中的空白字符)。

完成后,我们剩下的可以是文本字符串。 这意味着我们可以安全地应用诸如 GZIP(大多数浏览器都理解)之类的压缩算法。

最后,还有缓存。 浏览器第一次呈现页面时它不会有帮助,但它会在以后的访问中节省很多。 但是,记住两点至关重要:

  • 如果你使用 CDN,请确保支持缓存并在正确设置。
  • 与其等待资源的到期,不如 将文件的“指纹”嵌入到其 URL 中,以使本地缓存无效。

当然,应该为每个资源定义缓存策略。 有些可能很少改变或根本不会改变,有的则是变化的很快,还有些文件包含敏感的信息(可以使用 “private” 防止 CDN 缓存私有数据)

2. 减少关键资源的总数

“关键”仅指网页正确呈现所需的资源。 因此,我们可以直接跳过所有流程中没有涉及的样式以及脚本文件。

样式

为了告诉浏览器不需要特定的 CSS 文件,我们应该为所有引用样式表的链接设置媒体属性。 使用这种方法,浏览器将只根据需要处理与当前媒体(设备类型、屏幕尺寸)匹配的资源同时降低所有其他样式表的优先级。 例如,如果你将 media=“print” 属性添加到引用样式以打印页面的样式标记,则这些样式不会在不打印媒体时干扰你的关键渲染路径

为了进一步改进该过程,你还可以将一些样式内联这可以为我们节省了至少一次到服务器的往返行程

脚本

如上所述,脚本会阻塞解析,因为它们可以改变 DOM 和 CSSOM。 为了避免这一点,所有脚本标签都必须用属性标记——异步或延迟。

标有 async 的脚本不会阻塞 DOM 构建或 CSSOM,因为它们可以在 CSSOM 构建之前执行。 但请记住,内联脚本无论如何都会阻止 CSSOM,除非你将它们放在 CSS 之上。

相比之下,标有 defer 的脚本将在页面加载结束时进行执行

换句话说,使用 defer,脚本直到页面加载事件被触发后才会执行,而 async 让脚本在文档被解析时就会在后台运行。

3.缩短关键渲染路径长度

最后,应将 CRP 长度缩短到可能的最小值。

作为样式标签属性的媒体查询将减少必须下载的资源总数。 script 标签属性 defer 和 async 将防止相应的脚本阻塞解析。

使用 GZIP 压缩、压缩和归档资源将减少传输数据的大小(从而也减少数据传输时间)。

内联一些样式和脚本也可以减少浏览器和服务器之间的往返次数。

按照最新的最佳性能实践理念,一个网站应该做的最快的第一件事就是展示 ATF 内容。 ATF 代表首屏这是立即可见的区域,无需滚动。 因此,最好以首先加载所需样式和脚本的方式重新排列与渲染相关的所有内容,而其他所有内容都停止(既不解析也不渲染)。

结尾

总而言之,网站性能优化包含了网站响应的各个方面,例如缓存、设置 CDN、重构、资源优化等,但是所有这些都可以逐步完成。 作为 Web 开发人员,你可以将本文作为参考,并始终记住在实验之前和之后测量性能。

浏览器开发人员尽最大努力优化你访问的每个页面的网站性能,这就是浏览器通常实现所谓的“预加载器”的原因。 这部分程序会在你以 HTML 格式请求的资源之前进行扫描,以便一次发出多个请求并让它们并行运行。 这就是为什么在 HTML(逐行)以及脚本标签中保持样式标签彼此靠近的原因。

此外,尝试批量更新 HTML 以避免多个布局事件这些事件不仅由 DOM 或 CSSOM 中的更改触发,而且在设备方向更改和窗口大小调整时也会触发。

点击下方,第一时间了解华为云新鲜技术~

华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云

击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

有关在页面渲染方面的性能优化。这里提几点需要考虑的。

1. 把CSS资源引用放到HTML文件顶部。

2. JavaScript资源引用放到HTML文件底部。

3. 不要在HTML中直接缩放图片。

在HTML中直接缩放图片会导致页面内容的重排重绘,此时可能会使用页面中的其他操作产生卡顿,因此要尽量减少在页面中直接进行图片缩放。

4. 减少DOM元素数量和深度。

5. 尽量避免使用<table>、<iframe>等慢元素。

6. 避免运行耗时的JavaScript。

7. 避免使用CSS表达式或CSS滤镜。

CSS表达式或CSS滤镜的解析渲染速度是比较慢的。在有其他解决方案的情况下应该尽量避免使用。