getentries 返回空数组主因是调用过早,应在 window.load 事件或微任务中调用;跨域资源需服务端配置 timing-allow-origin 头才能获取完整时间字段;需主动扩大缓冲区并监听 bufferfull 事件捕获异步资源。

getEntries 返回空数组?检查是否在页面加载后调用
直接在 <script></script> 标签里同步执行 performance.getEntries(),大概率拿到空数组。因为此时浏览器还没记录多少性能事件——navigation、resource、paint 等条目大多在 DOM 解析、资源加载、渲染阶段逐步写入。
实操建议:
- 把调用放在
window.addEventListener('load', ...)回调里,确保 HTML 解析完成、所有资源(含图片、CSS)已触发加载逻辑 - 更稳妥的做法是监听
performance.getEntriesByType('navigation')是否有结果,或用setTimeout(..., 0)微延迟再取一次(仅作兜底) - 若需捕获首屏关键时间(如
first-paint),必须监听paint类型并提前注册:performance.setResourceTimingBufferSize(500)防止被覆盖
只拿到 navigation 条目?需要显式指定 type 参数
performance.getEntries() 默认返回所有类型,但实际中常只看到 navigation 条目——这是因为其他类型(如 resource、paint)默认不自动开启,或已被浏览器裁剪。
实操建议:
- 想获取资源加载数据,先调用
performance.getEntriesByType('resource'),而不是依赖无参调用 - 获取绘制时间需先确认支持:
if ('paint' in performance),再用performance.getEntriesByType('paint') - 注意
resource条目默认只包含同源资源;跨域资源需服务端响应头带Timing-Allow-Origin: *,否则时间字段全为 0
时间字段全是 0?检查跨域资源的 CORS 配置
对 <img src="https://cdn.example.com/logo.png?x-oss-process=image/resize,p_40"> 这类跨域资源,即使 getEntriesByType('resource') 能列出条目,duration、responseStart 等字段也常为 0 —— 这不是 bug,是浏览器主动脱敏。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
实操建议:
- 服务端必须返回
Timing-Allow-Origin响应头,值为请求来源域名或* - 前端无法绕过该限制;即使加了
crossorigin="anonymous"属性,没有服务端配合依然拿不到细粒度时间 - 验证方式:打开 DevTools → Network → 找对应资源 → 查看 Response Headers 中是否存在
Timing-Allow-Origin
entries 数量突然变少?留意缓冲区大小和清空时机
performance.getEntries() 返回的是当前缓冲区快照,而浏览器对不同类型的条目有独立缓冲区(如 resource 默认最多存 150 条),超出即 FIFO 覆盖。你可能刚调用完就发现条目变少了。
实操建议:
- 尽早扩大缓冲区:
performance.setResourceTimingBufferSize(500)(在页面最顶部 script 中执行) - 避免多次调用
performance.clearResourceTimings(),它会清空整个 resource 缓冲区 - 注意
navigation类型条目永远只有 1 个(当前导航),不会被覆盖;但mark和measure条目需手动管理生命周期
真正难处理的是异步资源(如动态 import()、fetch)——它们的时间点分散在 JS 执行流中,必须靠持续轮询或监听 performance.onresourcetimingbufferfull 事件来捕获,不然极易遗漏。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










