PerformanceResourceTiming:decodedBodySize 属性

基线 2023

新可用

2023 年 3 月起,此功能在最新的设备和浏览器版本中均可使用。此功能可能在较旧的设备或浏览器中无法使用。

decodedBodySize 只读属性返回从消息正文的获取(HTTP 或缓存)中接收到的大小(以八位字节为单位),在移除任何应用的内容编码(如 gzip 或 Brotli)之后。如果资源是从应用程序缓存或本地资源中检索的,则它会返回移除任何应用的内容编码后的有效负载的大小。

decodedBodySize 属性可以具有以下值

  • 表示从消息正文的获取(HTTP 或缓存)中接收到的大小(以八位字节为单位)的数字,在移除任何应用的内容编码之后。
  • 如果资源是跨源请求且未使用 Timing-Allow-Origin HTTP 响应头,则为 0

示例

检查内容是否已压缩

如果 decodedBodySizeencodedBodySize 属性非空且不同,则内容已压缩(例如,gzip 或 Brotli)。

使用 PerformanceObserver 的示例,它会在浏览器性能时间轴中记录新的 resource 性能条目时通知。使用 buffered 选项访问观察者创建之前的条目。

js
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    const uncompressed =
      entry.decodedBodySize && entry.decodedBodySize === entry.encodedBodySize;
    if (uncompressed) {
      console.log(`${entry.name} was not compressed!`);
    }
  });
});

observer.observe({ type: "resource", buffered: true });

使用 Performance.getEntriesByType() 的示例,它仅显示在调用此方法时浏览器性能时间轴中存在的 resource 性能条目

js
const resources = performance.getEntriesByType("resource");
resources.forEach((entry) => {
  const uncompressed =
    entry.decodedBodySize && entry.decodedBodySize === entry.encodedBodySize;
  if (uncompressed) {
    console.log(`${entry.name} was not compressed!`);
  }
});

跨源内容大小信息

如果 decodedBodySize 属性的值为 0,则资源可能是跨源请求。要公开跨源内容大小信息,需要设置 Timing-Allow-Origin HTTP 响应头。

例如,要允许 https://mdn.org.cn 查看内容大小,跨源资源应发送

http
Timing-Allow-Origin: https://mdn.org.cn

规范

规范
资源定时
# dom-performanceresourcetiming-decodedbodysize

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅