必须在页面加载完成前初始化performanceobserver,否则fcp、lcp等首屏指标必然丢失;需在中直接执行new performanceobserver(),监听paint和largest-contentful-paint类型,navigation条目须在document.readystate==='complete'后获取,跨域资源需添加crossorigin属性,自定义打点应配合mark/measure及sendbeacon闭环上报。

直接在页面加载完成前初始化 PerformanceObserver,否则 FCP、LCP 等首屏指标必然丢失——这不是代码写错,而是浏览器根本没机会把它们塞进队列。
关键指标必须用 PerformanceObserver 提前监听
FCP 和 LCP 是“一过性”事件,渲染完成后立即生成并可能被丢弃。延迟注册 observer 就等于放弃采集。
- 把
new PerformanceObserver()的代码直接写在的<script></script>标签里,不加defer,不包函数,不等任何钩子 - 监听
paint类型获取 FCP:entry.name === 'first-contentful-paint' - 单独监听
largest-contentful-paint类型(不能和 paint 混用同一 observer) - LCP 取最终值:调用
list.getEntries().pop().startTime,因为 LCP 可能被后续更大元素覆盖
navigation 条目要在正确时机获取
performance.getEntriesByType('navigation') 返回空数组,通常不是 API 失效,而是调用时机或上下文错误。
- 必须等
document.readyState === 'complete'或监听window.addEventListener('load', ...)后再调用 - 不要在新打开的空白页(如
about:blank)测试,它没有导航上下文 - 确认类型名是小写的
'navigation',不是'Navigation'或'nav' - SPA 路由跳转不会产生新的 navigation 条目,它只记录整个文档的初始导航
跨域资源 duration 为 0?补上 crossorigin 属性
跨域资源默认屏蔽关键字段,duration 和部分时间戳会被浏览器清零,不是数据没收集到。
- 静态资源需显式声明:
<script src="https://cdn.example.com/a.js" crossorigin></script> - 动态插入资源要手动设置:
img.crossOrigin = 'anonymous' - 调用
getEntriesByType('resource')前确保已在load事件后执行,否则部分资源可能尚未完成加载 - 过滤掉
entry.duration === 0或entry.initiatorType === ''的条目,它们通常是预加载或无效资源
自定义打点与上报要闭环
标记业务关键节点 + 测量耗时 + 可靠上报,构成完整监控链路。
- 用
performance.mark('api-start')和performance.mark('api-end')打点 - 用
performance.measure('api-time', 'api-start', 'api-end')生成测量条目 - 通过
performance.getEntriesByType('measure')获取结果 - 使用
navigator.sendBeacon()在页面卸载前上报,避免因跳转或关闭导致数据丢失
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











