当前位置:首页 > 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防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…