专栏名称: 前端早读课
我们关注前端,产品体验设计,更关注前端同行的成长。 每天清晨五点早读,四万+同行相伴成长。
目录
相关文章推荐
前端之巅  ·  Vue.js:极速选手还是高风险赌徒? ·  4 天前  
前端早读课  ·  【早阅】如何使用Vike和Vite构建可扩展 ... ·  2 天前  
前端早读课  ·  【早阅】了解Astro 4.10中的环境变量和容器 ·  4 天前  
前端大全  ·  20个超好看的落地页/首页模板(附源码) ·  5 天前  
前端早读课  ·  【第3377期】剪贴板如何存储不同类型的数据 ·  5 天前  
51好读  ›  专栏  ›  前端早读课

【第781期】理解Critical CSS

前端早读课  · 公众号  · 前端  · 2017-06-30 04:56

正文

前言

前段时间在微博上看到 inline 首屏 css,一脸懵逼,这又是什么新科技。 本着好奇的心搜索看看,最后@大漠给我推荐了这篇。

正文从这开始~

CSS 资源的加载情况对浏览器渲染页面的影响很大,这是因为默认情况下浏览器只有在完成

部分 CSS 样式的加载、解析之后才会渲染页面。这种渲染方式意味着,如果 CSS 文件很大,那么用户就必须等待很长的时间才能看到渲染结果。针对这一问题,我们将在接下来的内容中讨论一种非常规的解决方案,提高页面的渲染速度,这一方案常被称为 critical rendering path。

我们要做的优化就是找出渲染首屏的最小 CSS 集合(Critical CSS),并把它们写到

部分,从而让浏览器接收到 HTML 文件后就尽快渲染出页面。对于剩余部分的 CSS,我们可以使用异步的方式进行加载。对于如何判断哪些 CSS 是首屏渲染需要的,我们需要通过分析 DOM 结构来确定,当然,手动来处理这些工作就太单调乏味了,所以在后文我会为大家介绍几种自动化处理的工具。

实战

首先,我们再重新梳理一遍步骤:将样式分成两份,一份是渲染首屏的最小集合,另一份是渲染页面剩余部分的样式,对于第一份,将其内嵌在

部分,对于第二部分则使用异步的方式加载。这种解决方案初看起来有些怪异,但实质上很简单,通过一次请求就获取到 HTML 文档和渲染首屏的 CSS 样式,尽快地为用户提供响应结果。为了更好地理解这一方案,下面的代码演示了核心的 HTML 结构:

<!doctype html>
<head>
 <style> /* inlined critical CSS */ </style>
 <script> loadCSS('non-critical.css'); </script>
</head>
<body>
 ...body goes here
</body>
</html>

在上面的代码中,我们取出首屏渲染所必须的 critical CSS,以内联的方式写在