# 1 性能优化方式

⚡ 30 秒速记

  • 按用户感知的时间线分四段:加载(网络+体积)、渲染(首屏绘制)、交互(响应延迟)、运行时(长任务、内存)
  • 加载:路由懒加载、CDNgzip/br、关键资源 preload、图片按设备出尺寸 + 现代格式
  • 渲染:关键 CSS 内联、JSdefer、骨架屏、避免首屏图懒加载(会拖垮 LCP
  • 交互与运行时:长任务分片或搬进 Worker、动画只动 transform/opacity、长列表虚拟滚动
  • 先量再改Performance 看阶段耗时、Coverage 看代码使用率、线上看 LCP/INP/CLSP75

性能优化要结合具体加载环节处理,当前资料明确给出的方式是对外部域名进行 DNS 预解析。 浏览器访问域名前需要先把域名解析成对应的 IP,这个过程本身会消耗时间。通过提前声明 dns-prefetch,可以让浏览器预先完成解析,为后续资源请求减少这部分等待。它适合页面确定会访问某个外部域名的场景,其他优化方式还需要结合资源和页面情况判断。

# 1.1 DNS 预解析

⚡ 30 秒速记

  • dns-prefetch 只提前把域名解析成 IP,不建立连接
  • 它适合页面后续确定会访问的第三方域名,当前主域通常已在导航时解析
  • 域名过多会抢占网络与解析资源,隐私敏感场景还会提前暴露访问意图
  • 需要连 TCP/TLS 一并提前建立时用 preconnect,但只保留少量关键源

DNS 预解析就是让浏览器提前把目标域名解析成对应的 IP,减少真正请求资源时的等待。 使用时可以在页面中添加 <link rel="dns-prefetch" href="//blog.poetries.top">,提示浏览器提前处理这个域名。它优化的是域名解析阶段,并不代表资源内容已经被下载。一般用于页面后续确定会访问的外部域名,没有相关请求时则不会带来实际收益。

  • DNS 解析也是需要时间的,可以通过预解析的方式来预先获得域名所对应的 IP
<link rel="dns-prefetch" href="//blog.poetries.top">

# 1.2 缓存

⚡ 30 秒速记

  • 先判强缓存:Cache-Control: max-age 新鲜时直接用本地副本,不发请求
  • 过期后走协商缓存:ETag/If-None-MatchLast-Modified/If-Modified-Since
  • 未变化返回 304 复用响应体,已变化返回 200 和新内容
  • 带内容哈希的静态资源适合长期缓存,HTML 通常需要及时验证
  • no-cache 是“可以存但每次验证”,no-store 才是“完全不存”

浏览器缓存分为强缓存和协商缓存,前者在有效期内直接使用本地资源,后者会向服务端确认资源是否变化。 强缓存通常由 Cache-Control: max-age 控制,且 Cache-Control 的优先级高于 Expires。缓存过期后,可通过 ETagIf-None-Match,或 Last-ModifiedIf-Modified-Since 进行协商;资源未变时返回 304。频繁变化的资源可用 no-cache 配合 ETag,完全不需要缓存时才使用 no-store,带文件指纹的代码文件则适合长期缓存。

webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部