预加载/预获取指南 - 资源提示选择
根据资源类型和加载场景,推荐使用preload、prefetch还是preconnect标签。
UD5工具箱
| # | 资源URL | 类型 | 持续时间 | DNS | TCP | 请求耗时 | 响应耗时 | 传输大小 | 协议 |
|---|---|---|---|---|---|---|---|---|---|
| 正在加载数据... | |||||||||
暂无统计数据
Resource Timing API 是 Web Performance API 的一部分,它提供了网页加载的每个资源(如图片、CSS、JS、XHR请求等)的详细网络计时信息。通过 performance.getEntriesByType('resource') 可以获取所有这些计时数据,包括DNS解析时间、TCP连接时间、请求响应时间等,帮助开发者分析和优化页面性能。
浏览器为 Resource Timing 条目维护一个有限大小的缓冲区(默认通常为 250条)。当页面加载大量资源(如大型SPA应用、包含许多图片的页面)时,超过缓冲区容量的计时条目会被丢弃,导致无法获取完整的性能数据。通过 performance.setResourceTimingBufferSize(n) 可以调整缓冲区大小,通过监听 resourcetimingbufferfull 事件可以在缓冲区满时采取措施(如增大缓冲区或发送数据到服务器)。
可以通过 transferSize 属性判断:如果 transferSize === 0 且资源成功加载(status为200或304),说明资源来自缓存(本地缓存或Service Worker缓存)。如果 transferSize > 0,则是从网络传输的实际大小。注意:跨域资源如果没有 Timing-Allow-Origin 响应头,transferSize 也会是0。
处理策略有3种:
1️⃣ 增大缓冲区:调用 performance.setResourceTimingBufferSize(newSize) 设置更大的值。
2️⃣ 清空缓冲区:调用 performance.clearResourceTimings() 清空后再收集新数据(注意旧数据会丢失)。
3️⃣ 主动收集:在事件触发前定期调用 performance.getEntriesByType('resource') 获取数据并存储到自己的数组中,然后清空缓冲区。
推荐做法:在事件中先增大缓冲区,同时将当前数据发送到分析服务器。
常见原因:
• 跨域资源:如果没有 Timing-Allow-Origin 响应头,详细计时(DNS、TCP、请求响应时间等)会被归零,只有 startTime 和 duration 可用。
• 缓存命中:从缓存加载的资源网络阶段时间为0。
• HTTP/3或QUIC:某些连接阶段不适用(如 secureConnectionStart 在非HTTPS下为0)。
• 同源重定向:重定向相关时间可能为0。
PerformanceObserver 是更高效的方式,可以实时接收新的资源计时条目而不需要轮询:const observer = new PerformanceObserver((list) => {
list.getEntries().forEach(entry => {
// 处理新的resource timing条目
});
});
observer.observe({ type: 'resource', buffered: true });
其中 buffered: true 参数可以获取调用前已存在的条目。在现代浏览器中推荐使用此方式。
Navigation Timing(通过 performance.getEntriesByType('navigation') 或 performance.timing)只记录主页面的加载计时,包括重定向、DNS、TCP、DOM解析、DOMContentLoaded、Load事件等。
Resource Timing 记录页面中每一个子资源(图片、脚本、样式、XHR等)的加载计时。两者结合可以全面分析页面性能。
根据资源类型和加载场景,推荐使用preload、prefetch还是preconnect标签。
输入第三方域名,生成<link rel='preconnect'>或dns-prefetch等资源提示标签。
提取当前页面Performance API的navigation、resource与paint数据,可视化展示加载各阶段时长。
对localStorage和IndexedDB的读写操作进行计时,比较两者性能差异。
将上传的小文件或文本转换为可直接嵌入HTML/CSS的data: URI格式。
拖放小图片或文本文件,转换为可嵌入HTML/CSS的Data URI,设置MIME类型。
连续输入头脑中的杂念,提交后基于关键词自动归类,清空大脑。
演示如何使用TextEncoderStream和TextDecoderStream分批对大文本进行编码和解码。
导入 Postman Collection JSON 文件,按顺序执行请求并显示响应,模拟简单的自动化测试。
通过PerformanceObserver获取首次绘制(FP)和首次内容绘制(FCP)时间。
使用现代浏览器文件系统访问API打开、编辑并保存本地文件,演示权限流程。
实时查看当前域名下所有localStorage键值对,支持编辑、删除和导出,前端调试利器。
拖拽构建阶段与任务,配置触发条件,生成对应的GitLab CI或GitHub Actions YAML代码。
在线URL编码解码工具,支持将字符串进行encodeURIComponent/decodeURIComponent处理,适用于参数传递。
输入长 URL,通过 TinyURL 或类似 API 生成短链接,并可复制或生成 QR 码。
添加多个周期任务和一次性延迟任务,在时间轴上观察其调用过程,学习JS定时器。
支持多层递归解码及批量URL编码操作,自动识别已编码字符,适合复杂参数解析与网络调试。
通过滑块调节LCP、FID、CLS等指标值,实时显示对应的谷歌核心网页指标评分与颜色。
编辑RAML定义,实时渲染资源结构、方法及响应示例,适合REST API设计初期。
粘贴以data:开头的链接,自动判断MIME类型并预览内容,或提供下载按钮。
进行比特、字节、千字节、兆字节、吉字节等数字存储单位的快速换算,支持十进制和二进制前缀。
添加楼层请求,观察电梯在不同调度算法下的移动轨迹和等待时间。
粘贴Sitemap XML内容,解析并列出所有包含的URL地址。
可视化演示固定窗口、滑动窗口、令牌桶等常见限流算法,实时请求计数与拒绝逻辑。
计算Whirlpool算法哈希值,输出512位高强度摘要,用于数据完整性校验和密码学实践。
上传CSV文件,指定优先排序列和升降序,干净地整理杂乱数据。
填写作者、年份等信息,一键生成对应格式的参考文献条目,支持导出。
输入URL提取OG标签,模拟Facebook/Twitter/LinkedIn卡片显示效果,优化链接分享。
设置基础字号后批量转换像素值为em/rem,同时提供反向计算,保证响应式单位准确。
分解URL为协议、主机、端口、路径、查询字符串和哈希等各个组成部分,便于理解与调试。