当前位置:首页 > JavaScript

js实现网络延迟

2026-03-16 00:04:11JavaScript

测量网络延迟的方法

使用 JavaScript 的 Performance API 可以测量网络请求的延迟。performance.now() 方法返回一个高精度时间戳,单位为毫秒,可用于计算请求的耗时。

const start = performance.now();
fetch('https://example.com/api')
  .then(response => response.json())
  .then(data => {
    const end = performance.now();
    const latency = end - start;
    console.log(`Network latency: ${latency} ms`);
  });

使用 WebSocket 测试延迟

WebSocket 提供全双工通信,适合测试实时延迟。通过发送和接收消息的时间差计算延迟。

js实现网络延迟

const socket = new WebSocket('wss://example.com/socket');
let startTime;

socket.onopen = () => {
  startTime = performance.now();
  socket.send('ping');
};

socket.onmessage = (event) => {
  if (event.data === 'pong') {
    const endTime = performance.now();
    const latency = endTime - startTime;
    console.log(`WebSocket latency: ${latency} ms`);
  }
};

使用 XMLHttpRequest 测量延迟

XMLHttpRequest 是传统的 AJAX 请求方式,通过监听请求的各阶段时间戳计算延迟。

js实现网络延迟

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/api');
xhr.onreadystatechange = function() {
  if (xhr.readyState === 4) {
    const latency = performance.now() - xhr.startTime;
    console.log(`XHR latency: ${latency} ms`);
  }
};
xhr.startTime = performance.now();
xhr.send();

使用 Resource Timing API

Resource Timing API 提供了更详细的资源加载时间信息,可以分析网络请求的各个阶段耗时。

const resources = performance.getEntriesByType('resource');
resources.forEach(resource => {
  console.log(`Resource: ${resource.name}`);
  console.log(`DNS lookup time: ${resource.domainLookupEnd - resource.domainLookupStart} ms`);
  console.log(`Connection time: ${resource.connectEnd - resource.connectStart} ms`);
  console.log(`Request duration: ${resource.responseEnd - resource.requestStart} ms`);
});

使用 navigator.connection

navigator.connection 提供了网络连接信息,包括估算的下行速度和往返时间(RTT)。

if ('connection' in navigator) {
  const connection = navigator.connection;
  console.log(`Effective network type: ${connection.effectiveType}`);
  console.log(`Estimated RTT: ${connection.rtt} ms`);
  console.log(`Downlink speed: ${connection.downlink} Mbps`);
}

注意事项

  • 跨域请求可能受到 CORS 限制,确保目标服务器允许测量。
  • 延迟测量受本地网络环境影响,多次测量取平均值更准确。
  • 对于 HTTPS 请求,SSL 握手时间会包含在总延迟中。
  • WebSocket 和 HTTP/2 协议通常比传统 HTTP 请求延迟更低。

标签: 网络js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js sort 实现

js sort 实现

数组排序基础方法 JavaScript 数组的 sort() 方法默认按照字符串 Unicode 码点顺序排序。直接调用时会将元素转为字符串再比较: const arr = [10, 2, 5, 1…

js实现选择目录

js实现选择目录

在JavaScript中实现选择目录的功能通常需要结合浏览器API或第三方库,以下是几种常见方法: 使用 <input type="file"> 的 webkitdirectory 属性…