CSS 面试题 目录

请解释关键 CSS (Critical CSS) 的概念和作用。如何提取和优化关键 CSS?

推荐答案

关键 CSS 的概念

关键 CSS(Critical CSS),也称为首屏 CSS 或 above-the-fold CSS,指的是渲染页面首屏内容所需的最小 CSS 集合。它是在页面初始加载时,为了快速显示首屏内容而必须优先加载的 CSS 样式。

关键 CSS 的作用

  • 提升用户体验: 通过减少初始渲染所需的 CSS 大小,加快首屏加载速度,提升用户体验。
  • 减少渲染阻塞: 浏览器在渲染页面时,遇到 CSS 文件会阻塞渲染,关键 CSS 的作用是减少这种阻塞,让页面更快地显示给用户。
  • 提高性能评分: 搜索引擎和性能分析工具(如 Lighthouse)会考虑首屏加载速度,优化关键 CSS 可以提升网站的性能评分。

如何提取和优化关键 CSS

  1. 提取:

    • 手动提取: 根据首屏内容手动编写 CSS,这种方式比较耗时,但可以做到最精准的控制。
    • 使用工具:
      • 在线工具: 有很多在线的 Critical CSS 生成器(如:CriticalCSS Generator)。
      • Node.js 包: 可以使用如 criticalpenthouse 等 Node.js 包自动化提取。这些工具会解析 HTML,识别首屏需要的样式,并生成对应的 CSS。
    • 浏览器开发者工具: 使用 Chrome 或 Firefox 的开发者工具中的 Coverage 功能,可以分析哪些 CSS 被实际使用到,从而辅助提取关键 CSS。
  2. 优化:

    • 精简: 去除不必要的样式,只保留首屏渲染所需的最小样式。
    • 内联: 将提取的关键 CSS 直接内联到 HTML 的 <head> 标签中,避免额外的 HTTP 请求,从而尽早渲染页面。
    • 异步加载剩余 CSS: 在关键 CSS 加载后,使用 rel="preload"loadCSS 等技术异步加载其余 CSS,避免阻塞渲染。
    • 压缩: 对关键 CSS 进行压缩,减小文件大小。

本题详细解读

关键 CSS 的原理

浏览器在解析 HTML 文档时,如果遇到 <link> 标签加载 CSS,会暂停渲染,直到 CSSOM (CSS Object Model) 构建完成。如果 CSS 文件过大,加载和解析的时间就会较长,导致白屏时间增加。关键 CSS 的核心思想是:先加载渲染首屏内容必须的样式,让用户尽快看到页面,然后再异步加载剩余的 CSS。

提取工具的原理

大多数提取关键 CSS 的工具,其核心原理都是通过以下步骤实现的:

  1. 解析 HTML: 工具会解析 HTML 文件,构建 DOM 树。
  2. 模拟浏览器渲染: 工具会模拟浏览器渲染,通常是使用 headless 浏览器(如 Puppeteer 或 PhantomJS)在无界面的环境下加载 HTML。
  3. 计算首屏范围: 工具会根据用户设置的首屏尺寸或默认值,计算出首屏可见区域。
  4. 识别首屏元素: 工具会识别位于首屏区域内的所有 HTML 元素。
  5. 提取样式: 工具会提取与这些元素相关的 CSS 样式。
  6. 生成关键 CSS: 工具会将提取的样式生成为独立的 CSS 代码,供开发者使用。

优化关键 CSS 的注意事项

  1. 首屏定义: 首屏的定义可能因设备和屏幕尺寸而异,需要考虑不同设备情况下的首屏范围,或者采取较为灵活的配置方案。
  2. 动态内容: 对于动态加载的内容,关键 CSS 可能需要进行调整,或者采用预加载等方式,确保首屏内容能够正常渲染。
  3. 更新维护: 在页面结构或样式发生变化时,关键 CSS 也需要更新,以保持其有效性。

异步加载剩余 CSS 的方法

  1. rel="preload" 使用 <link rel="preload" as="style" href="styles.css"> 可以让浏览器预先加载 CSS 文件,但不会立即应用样式,只有在需要的时候才会应用。
  2. loadCSS 这是一个 JavaScript 函数,可以动态创建 <link> 标签,并将其插入到 document.head 中,从而实现 CSS 的异步加载。
  3. 其他方法: 也可以使用如 onload 事件监听 CSS 加载完成,或者利用 JavaScript 动态加载 CSS 的方式。

总之,关键 CSS 是提升 Web 页面性能的重要手段,理解其概念、提取方法和优化策略,对于构建高效的用户体验至关重要。

纠错
反馈