PerformanceServerTiming

基线 2023

新发布

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

注意:此功能在Web Workers中可用。

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在一些或所有支持的浏览器中可用。

PerformanceServerTiming接口显示了与响应一起发送到Server-Timing HTTP 标头中的服务器指标。

此接口仅限于同一来源,但您可以使用Timing-Allow-Origin标头来指定允许访问服务器指标的域。请注意,此接口仅在一些浏览器中的安全上下文(HTTPS)中可用。

实例属性

PerformanceServerTiming.description 只读

服务器指定指标描述的字符串值,或空字符串。

PerformanceServerTiming.duration 只读

包含服务器指定指标持续时间的双精度数,或值为0.0

PerformanceServerTiming.name 只读

服务器指定指标名称的字符串值。

实例方法

PerformanceServerTiming.toJSON()

返回PerformanceServerTiming对象的 JSON 表示形式。

示例

假设一个发送Server-Timing标头的服务器,例如一个这样的 Node.js 服务器

js
const http = require("http");

function requestHandler(request, response) {
  const headers = {
    "Server-Timing": `
      cache;desc="Cache Read";dur=23.2,
      db;dur=53,
      app;dur=47.2
    `.replace(/\n/g, ""),
  };
  response.writeHead(200, headers);
  response.write("");
  return setTimeout(() => {
    response.end();
  }, 1000);
}

http.createServer(requestHandler).listen(3000).on("error", console.error);

现在可以通过 JavaScript 使用PerformanceResourceTiming.serverTiming属性观察PerformanceServerTiming条目,它们存在于navigationresource条目中。

使用PerformanceObserver的示例,它会通知新的navigationresource性能条目,因为它们在浏览器的性能时间线中被记录。使用buffered选项可以访问在观察者创建之前的条目。

js
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    entry.serverTiming.forEach((serverEntry) => {
      console.log(
        `${serverEntry.name} (${serverEntry.description}) duration: ${serverEntry.duration}`,
      );
      // Logs "cache (Cache Read) duration: 23.2"
      // Logs "db () duration: 53"
      // Logs "app () duration: 47.2"
    });
  });
});

["navigation", "resource"].forEach((type) =>
  observer.observe({ type, buffered: true }),
);

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

js
for (const entryType of ["navigation", "resource"]) {
  for (const { name: url, serverTiming } of performance.getEntriesByType(
    entryType,
  )) {
    if (serverTiming) {
      for (const { name, description, duration } of serverTiming) {
        console.log(`${name} (${description}) duration: ${duration}`);
        // Logs "cache (Cache Read) duration: 23.2"
        // Logs "db () duration: 53"
        // Logs "app () duration: 47.2"
      }
    }
  }
}

规范

规范
服务器计时
# the-performanceservertiming-interface

浏览器兼容性

BCD 表仅在浏览器中加载

另请参见