
1) 【一句话结论】
核心是通过资源优化(代码压缩、图片WebP转换、字体子集)、网络请求优化(CDN选型结合用户分布、HTTP/2多路复用、请求分片)、缓存策略(强缓存时间匹配资源更新频率、服务端ETag/Last-Modified)、预加载机制(关键资源判断标准+延迟加载非关键资源),多维度协同提升首屏加载效率,将初始加载时间控制在3秒以内。
2) 【原理/概念讲解】
loading="lazy"懒加载减少首屏压力。Cache-Control:max-age=604800秒(结合静态资源1周更新频率),浏览器首次加载后可缓存资源,后续请求直接从缓存读取。ETag/Last-Modified头,浏览器先检查缓存,未过期则返回200,否则请求服务器验证资源是否最新。<link rel="preconnect" href="https://cdn.aliyun.com">),减少DNS解析和TCP握手时间。main.js、main.css,体积≤200KB),确保首屏渲染。3) 【对比与适用场景】
缓存策略对比:
| 策略类型 | 定义 | 特性 | 使用场景 | 注意点 |
| --- | --- | --- | --- | --- |
| 强缓存 | 浏览器直接从缓存读取资源,无需请求服务器 | 依赖Cache-Control/Expires头 | 首次加载后,资源未过期时直接使用 | 需确保资源更新时更新缓存头(如URL后缀+版本号) |
| 协商缓存 | 浏览器先检查缓存,若未过期则返回200,否则请求服务器 | 依赖ETag/Last-Modified头 | 资源频繁更新(如动态内容),需验证是否最新 | 需服务器支持ETag/Last-Modified生成 |
预加载类型对比:
| 类型 | 定义 | 作用 | 使用场景 | 注意点 |
| --- | --- | --- | --- | --- |
| preconnect | 预建立与域名的连接 | 减少DNS解析和TCP握手时间 | 关键资源(如主页面JS/CSS) | 不下载资源,仅建立连接 |
| prefetch | 预取用户可能访问的资源 | 提前加载用户可能点击的链接 | 下一页链接、相关推荐 | 优先级低于preload |
| preload | 强制浏览器优先加载关键资源 | 确保首屏资源优先加载 | 主页面JS/CSS、字体 | 下载资源,可能影响其他资源加载 |
4) 【示例】
<img src="cover.webp" alt="小说封面" loading="lazy" />
<link rel="preload" href="main.js" as="script">
<link rel="preload" href="main.css" as="style">
<link rel="preconnect" href="https://cdn.aliyun.com">
location /static/ {
root /path/to/cdn;
expires 1w;
add_header Cache-Control "public, max-age=604800";
add_header ETag "W/\"<hash>\""; # 服务端生成ETag
}
5) 【面试口播版答案】
“面试官您好,针对起点中文网热门小说首屏加载慢的问题,我会从资源优化、网络请求优化、缓存策略和预加载四个方面设计方案。首先资源优化,我们会用UglifyJS压缩JS/CSS,用TinyPNG将JPG转WebP并设置懒加载,用FontForge做字体子集,减少首屏资源体积。然后网络请求优化,国内用户多选阿里云CDN,缓存资源到离用户近的节点,用HTTP/2多路复用减少连接开销,大文件分片加载。缓存策略上,静态资源1周更新,设置max-age=604800秒,服务端生成ETag,首次加载后浏览器可缓存,后续请求直接从缓存读取。预加载机制,用preconnect预建立连接,preload强制加载首屏JS/CSS(体积≤200KB),prefetch预取下一页链接,非关键资源延迟加载。通过这些措施,多维度提升加载效率,将首屏加载时间控制在3秒以内。”
6) 【追问清单】
7) 【常见坑/雷区】