服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

两行 CSS 提升渲染性能7倍!

日期: 来源:技术胖学程序收集编辑:前端新世界
喜欢就关注我们吧


话不多说,先直接上代码:

{
  content-visibility: auto;
  contain-intrinsic-size: 1px 5000px;
}

就是这两行css代码,添加了以后页面渲染性能将提高大约7倍!

为什么需要这个?

现在的网站需要优化和高性能,因为用户的注意力很短暂。阈值响应时间为400毫秒。

假如Facebook、Instagram这样的网站登录时间大于阈值会怎么样?那么大概没人会再回到这些网站了。大家说对吧?

哪些场景适合使用?

最常见的用例是当你需要在页面加载时呈现大量数据列表、数据表格或者图片列表的时候。

例如像文档、说明书这样的静态网站,或旅游博客等......

如何工作?

当你对CSS类应用content-visibility: auto时,浏览器就会变得非常聪明,它可以跳过渲染带有这个CSS属性的DOM元素。

浏览器需要知道DOM的布局才能渲染,且不会渲染那些不在视窗中的元素,而实际上你提供的contain-intrinsic-size会产生一个空框。

总而言之,所有渲染都被推迟到浏览器使用你提供的宽度、高度和样式渲染实际布局的视窗。

P.S:不在视窗之外的布局会有一个height: 0,所以当延迟布局来到视窗时,会堆叠在一起,所以这就是为什么需要contain-intrinsic-size的原因。但是,不用担心,这些只是备用值,浏览器在视窗中渲染时将渲染实际值。

这样做的一个缺点是,如果未正确给出contain-intrinsic-size,滚动条会很古怪并出现抖动现象。

浏览器支持

content-visibility依赖于CSS Containment规范[1]。截至撰写本文时,大多数谷歌浏览器目前都支持content-visibility

而且,content-visibility支持对于在高端系统上实现功能来说并不是一件坏事,所以我相信,随着web开发的进步,这将很快会得到所有浏览器的支持。

备选方案

再介绍一个使用JavaScript提高性能的替代方法,如使用List Virtualization[2],但是,见识过这样简单明确的2行css ,谁还会想要编写和维护实现相同功能却需求100行的js代码呢?

参考资料

[1]

CSS Containment规范: https://caniuse.com/css-containment

[2]

List Virtualization: https://www.patterns.dev/posts/virtual-lists/

相关阅读

  • 三伏天吃火锅,竟然有这个意思?

  • 元宵节的正确打开方式是啥?除了吃汤圆就是猜灯谜了!看了视频,你是不是也跃跃欲试了?上城区纪委监委与丁兰街道党工委、纪工委特地为大家准备了廉洁灯谜,一起来猜猜!
  • 30分钟吃掉wandb模型训练可视化

  • wandb是"我爱你,大baby"首字母的缩写。顾名思义,她是炼丹师的大宝贝,是炼丹师最爱的炼丹伴侣。公众号算法美食屋后台回复关键词:wandb,获取本教程 notebook源码 和 B站视频演示。
  • 货拉拉 Android 模块化路由框架:TheRouter

  • 点击上方蓝字关注我,知识会给你力量本文作者:张涛-货拉拉TheRouter 是一个 Kotlin 编写,用于 Android 模块化开发的一整套解决方案框架。Github 项目地址与使用文档详见 https:
  • 说回 TheRouter

  • 点击上方蓝字关注我,知识会给你力量❝补充:开源仓库地址:https://github.com/HuolalaTech/hll-wp-therouter-android❞没错,货拉拉开源的路由库 —— TheRouter 是我写的大约在1
  • TheRouter 的跨模块依赖注入实现原理

  • 点击上方蓝字关注我,知识会给你力量本文作者——张涛(货拉拉)TheRouter用于跨模块通信设计的ServiceProvider,核心设计思想是参考了SOA(面向服务架构)的设计方式。具体到 Androi
  • kotlin修炼指南8—集合中的高阶函数

  • 点击上方蓝字关注我,知识会给你力量Kotlin对集合操作类新增了很多快捷的高阶函数操作,各种操作符让很多开发者傻傻分不清,特别是看一些Kotlin的源码或者是协程的源码,各种眼花缭
  • kotlin修炼指南9-Sequence的秘密

  • 点击上方蓝字关注我,知识会给你力量人们经常忽略Iterable和Sequence之间的区别。这是可以理解的,因为即使它们的定义也几乎是相同的。interface Iterable<out T> { operato
  • Flutter混编工程之异常处理

  • 点击上方蓝字关注我,知识会给你力量Flutter App层和Framework层的异常,通常是不会引起Crash的,但是Engine层的异常会造成Crash。而Flutter Engine部分的异常,主要是libfutter.so

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 两行 CSS 提升渲染性能7倍!

  • 喜欢就关注我们吧话不多说,先直接上代码:{ content-visibility: auto; contain-intrinsic-size: 1px 5000px;}就是这两行css代码,添加了以后页面渲染性能将提高大约7倍!为什么
  • 2月才刚开始,我就用Python兼职赚了2w!

  • 朋友们好!先说个好消息,Python圈内一年一度的春季私活接单黄金期现已来临!现在是本季度中,最容易接到爬虫类私活的时期,不仅接单容易,报酬也很高。抓紧机会接私活,一个星期赚上万很
  • 4女2男、酒后开房、发生关系、拍照分享…

  • 有句话是这样说的:“在家靠父母,出门靠朋友”。朋友对于我们人生道路来讲是缺一不可的,而朋友所起到的作用也是不言而喻的。然而身边最亲近的朋友竟是隐藏在你身边的毒蛇,正在紧