📚前端面试题速记
Q7

通过 <link> 引入 CSS 会阻塞页面渲染吗?JS 会吗?如何优化?

速记答案(30 秒)

CSS 会阻塞首次渲染(浏览器要等 CSS 才能计算布局);JS 默认同步脚本会阻塞 HTML 解析和渲染。优化 CSS:拆分关键 CSS、media 属性、Critical CSS 内联。优化 JS:defer/async、放底部、按需加载。

📖 详细讲解

标准面试回答(推荐记住)

CSS 通过 link 引入会阻塞首次渲染,因为浏览器需要等 CSSOM 构建完成才能进行布局计算。JavaScript 默认的同步脚本会阻塞 HTML 解析和渲染。CSS 优化方法有:把关键 CSS 内联到 head、非关键 CSS 用 media 属性延迟加载、拆分 CSS 文件。JS 优化方法有:使用 defer 或 async 属性、把脚本放到 body 底部、按路由或功能拆包懒加载。

阻塞行为对比

资源 阻塞解析 阻塞渲染
CSS 不阻塞 阻塞
同步 JS 阻塞 阻塞
async JS 不阻塞 加载完立即执行
defer JS 不阻塞 DOM 解析完执行

优化策略

<!-- 关键 CSS 内联 -->
<style>/* Critical CSS */</style>

<!-- 非关键 CSS 异步加载 -->
<link rel="preload" href="style.css" as="style" onload="this.rel='stylesheet'">

<!-- JS defer/async -->
<script src="app.js" defer></script>

面试要点

  • CSS 阻塞渲染、JS 阻塞解析
  • 掌握 defer 和 async 区别
  • 知道 Critical CSS 优化策略

💻 代码示例

Critical CSS 优化
🎨 效果预览