惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
B
Blog
Stack Overflow Blog
Stack Overflow Blog
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
D
DataBreaches.Net
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
罗磊的独立博客
L
LangChain Blog
V
Visual Studio Blog
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享

新锐博客

vscode连接cnb并推送仓库 - 新锐博客 twikoo不用token查询文章浏览量 - 新锐博客 基于Astro构建的支持对话与生图的Web应用 - 新锐博客 deepseek-v4-flash-0731使用体验 - 新锐博客 基元律动免费送68元额度 - 新锐博客 Linux更换软件源 - 新锐博客 华为鸿蒙7.0花粉beta版发布 - 新锐博客 使用测速脚本测一下服务器带宽 - 新锐博客 trae告别白嫖时代,auto也需排队了 - 新锐博客 流量不够用?大流量卡免费领 - 新锐博客 推荐一个免费在线图片处理网站 - 新锐博客 AI清理C盘的优缺点 - 新锐博客 twikoo不算bug的bug - 新锐博客 最近网站的一些变动 - 新锐博客 腾讯EO开始发多余套餐啦!速领 - 新锐博客 hi168停止对个人用户的运营 - 新锐博客 哪吒监控曝高危漏洞,请尽快升级 - 新锐博客 IndexDB实现大文件下载的思路 - 新锐博客 鱼鱼api使用教程 - 新锐博客 服务器安装Dokploy替代vercel - 新锐博客 对于近几年的电视剧的无力吐槽 - 新锐博客 关于网站被攻击的后续 - 新锐博客 使用sessionStorage给音乐播放进度存储 - 新锐博客 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 AI模型掺水?如何辨别真假? - 新锐博客 感谢一九云给我防住了攻击 - 新锐博客 对一些新手使用AI编程的建议 - 新锐博客 Edgeone标记过期和直接删除有何区别? - 新锐博客 使用 Astro 自建博客,从零开始鏖战 14 小时 - 新锐博客 网站收录急剧下降,趁此机会迁移站点 - 新锐博客
用Navigation Timing API给博客添加上加载时间 - 新锐博客
莫忘 · 2026-05-18 · via 新锐博客

前言

这两天重构博客的时候,发现果核新主题的Aerocore主题好像有一个站点性能的组件,就想抄下来。于是就让ai做了以下事情,并且解释了每一步的作用。下面就分享给大家。

核心代码

整个测量只需要一行:

const navigation = performance.getEntriesByType('navigation')[0];

performance.getEntriesByType('navigation') 返回一个数组,里面只有一个元素——PerformanceNavigationTiming 对象。这个对象记录了页面从开始导航到完全加载的每一个时间戳。

时间节点

navigation 对象包含一堆关键属性:

属性含义
startTime页面导航开始的时间(时间原点)
requestStart浏览器开始发送请求
responseStart收到服务器第一个字节(TTFB)
responseEnd收到服务器最后一个字节
domInteractiveDOM 解析完成
domContentLoadedEventEndDOMContentLoaded 事件完成
loadEventEnd页面 load 事件完成

本站怎么用的

ai只给本站取了最关键的几个值:

const navigation = performance.getEntriesByType('navigation')[0];

// 完整页面加载时间(含 DNS、TCP、SSL、请求、DOM 解析、资源加载)
const loadTime = ((navigation.loadEventEnd - navigation.startTime) / 1000).toFixed(2);
document.getElementById('page-load').textContent = loadTime + ' 秒';

// 服务器响应延迟(TTFB)
const serverLatency = navigation.responseStart - navigation.requestStart;
  • loadEventEnd - startTime → 页面总加载时长
  • responseStart - requestStart → 服务器处理延迟

就这么简单,没有任何第三方库,纯浏览器原生 API。

注意事项

performance.getEntriesByType('navigation') 必须在页面 load 事件之后调用,否则 loadEventEnd 还是 0

window.addEventListener('load', () => {
  setTimeout(() => {
    const nav = performance.getEntriesByType('navigation')[0];
    console.log('页面加载耗时:', (nav.loadEventEnd - nav.startTime) / 1000, '秒');
  }, 0);
});

拆解更多指标

除了总时长,你还可以拆开看每个环节分别花了多久:

const nav = performance.getEntriesByType('navigation')[0];

console.log('DNS 查询:', nav.domainLookupEnd - nav.domainLookupStart, 'ms');
console.log('TCP 连接:', nav.connectEnd - nav.connectStart, 'ms');
console.log('SSL 握手:', nav.connectEnd - nav.secureConnectionStart, 'ms');
console.log('请求耗时:', nav.responseStart - nav.requestStart, 'ms');
console.log('响应下载:', nav.responseEnd - nav.responseStart, 'ms');
console.log('DOM 解析:', nav.domContentLoadedEventEnd - nav.responseEnd, 'ms');
console.log('页面总耗时:', nav.loadEventEnd - nav.startTime, 'ms');

兼容性

Navigation Timing API Level 2 兼容性很好:

  • Chrome 57+
  • Firefox 58+
  • Safari 15+
  • Edge 79+

基本上现代浏览器都支持。

莫忘

君子喻以义,小人喻以利

本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 新锐博客