可通过 performance.getEntriesByType("navigation")[0] 获取 Navigation Timing Level 2 数据,用 connectEnd − secureConnectionStart 计算 SSL 握手耗时,再除以 loadEventEnd − navigationStart 得占比;仅当 secureConnectionStart > 0 且不等于 connectStart 时有效。

可以通过 performance.getEntriesByType("navigation")[0] 获取 Navigation Timing Level 2 数据,从中提取 SSL 握手耗时(secureConnectionStart 到 connectEnd),再与整体加载时间(如 loadEventEnd − navigationStart)做比值,即可得到 SSL 阶段占比。
确认关键时间戳是否可用
SSL 握手阶段在 Navigation Timing 中没有直接命名字段,但可通过以下两个属性差值间接计算:
-
secureConnectionStart:若页面使用 HTTPS,则为 SSL/TLS 握手开始时间(毫秒时间戳);若为 HTTP,则该值等于
connectStart,即无 SSL 阶段 - connectEnd:TCP 连接完成且(如有)SSL 握手也完成的时间点
因此,SSL 握手耗时 = connectEnd − secureConnectionStart(仅当 secureConnectionStart > 0 且 secureConnectionStart !== connectStart 时才表示真实发生了 SSL 握手)。
计算整体加载时间基准
推荐使用端到端用户可感知的完整生命周期作为分母,例如:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
-
导航总时长:
loadEventEnd − navigationStart(从导航发起至 onload 事件结束) -
首屏关键路径:
domContentLoadedEventEnd − navigationStart(更贴近用户可交互体验) - 注意:避免使用已废弃的
performance.timing(Level 1),它在现代浏览器中精度低、部分字段不可靠
编写可运行的分析代码
以下脚本可在页面加载完成后执行,自动判断并输出 SSL 握手占比:
SSL 握手耗时 ${sslTime}ms,占整体加载 ${ratio}%
结合实际场景看是否异常
正常 HTTPS 页面中,SSL 握手通常占整体加载的 5%–25%,具体取决于网络 RTT 和服务器 TLS 配置。若占比持续超过 35%,需排查:
- 是否未启用 TLS False Start 或 0-RTT(如 HTTP/3 + QUIC 可显著压缩握手)
- 证书链是否过长或含吊销检查(OCSP Stapling 未开启)
- 服务端是否支持 Session Resumption(会话复用)
- 客户端是否首次访问、无缓存 SNI 或证书信息
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










