Roger Leung‘s Epcot

vuePress-theme-reco Roger Leung ( z3rog )    2018 - 2021
Roger Leung‘s Epcot

Choose mode

  • dark
  • auto
  • light
Blog
Note
Github (opens new window)
author-avatar

Roger Leung ( z3rog )

18

Article

20

Tag

Blog
Note
Github (opens new window)
  • 首页
  • 框架与工具链

    • Vue 3
    • Vue 2
    • Webpack 4
  • 前端性能优化

    • 性能优化的必要性
    • 性能指标
    • 基本手段
    • 离线缓存
  • 浏览器机制

    • 架构
    • 导航
    • 渲染机制
    • 缓存机制
  • 网络协议

    • TCP 协议
    • HTTP 协议
    • HTTPS 协议
    • HTTP 2 协议
    • HTTP 3 协议
  • 其他

    • V8 中的快慢属性与快慢数组
    • V8 解析执行 JavaScript 流程简述
    • V8 的垃圾回收机制
    • 100 行代码写一个破产版 Vite
    • 浅谈微前端

导航

vuePress-theme-reco Roger Leung ( z3rog )    2018 - 2021

导航

Roger Leung ( z3rog ) 2020-04-19 PerformanceNavigation

什么是浏览器的导航,它有什么流程?

祭出一张 W3C (opens new window) 规范中的神图 navigation-timing

该图中详细阐述了浏览器加载页面时触发的所有行为(钩子)的流程,这一过程一般成为导航(Navigation)。所有钩子均可通过 performance.timing 访问得到:

performance-timing

  • Prompt for unload:提示卸载。打开新页面的瞬间,准备卸载之前页面(如果有的话)的 document。这之后马上记录下时间作为 navigationStart
  • redirect(unload):重定向,若发生网络重定向直接跳至 DNS 解析,若发生本地重定向,查找本地强制缓存资源。同时卸载之前页面,回收内存。
  • App cache:读取本地缓存,减少网络 IO 开销(有缓存直接跳至 Processing)

提示

对于本地缓存,一般读取大量的小文件要比一个大文件更耗时,老式机械硬盘寻址需要反复转(切换扇区)且移动磁头,而固态硬盘虽然都是电路运算,也避免不了多次寻址。

以上三点均为浏览器本地行为

  • DNS:没有缓存,走网络,DNS 解析找到对应的 IP。DNS 解析发送的是 UDP 包。
  • TCP:建立 TCP 连接
  • Request:HTTP 通信
  • Response:服务器响应

以上四点上述均为网络行为

注意

responseStart 是客户端从服务端中接收到第一个字节时的时间。因为 requestStart 到 responseStart 之间的时间包含客户端发送完毕、客户端查询 / 运算、客户端返回内容等众多时间,这些时间在客户端是无法区分开的,在图中均被统计入 request 中。并且注意,没有 responseEnd。

  • Processing:浏览器解析 DOM,处理一系列响应、渲染行为。详见渲染机制
  • onLoad:加载完成。

以上两点均为浏览器本地行为




指标计算见 非视觉指标