js 实现 ping
在 JavaScript 中实现类似 ping 的功能通常需要结合网络请求或 WebSocket 来测量延迟。以下是几种常见方法:

使用 fetch 或 XMLHttpRequest 测量请求时间
通过发送 HTTP 请求并计算响应时间,模拟 ping 的效果。注意跨域限制:

async function ping(url) {
const start = performance.now();
try {
await fetch(url, { method: 'HEAD', mode: 'no-cors' });
const latency = performance.now() - start;
return { success: true, latency: latency.toFixed(2) + 'ms' };
} catch (error) {
return { success: false, error: error.message };
}
}
// 使用示例
ping('https://example.com').then(console.log);
使用 Image 对象检测可达性
适用于简单检测目标是否可访问,但不提供精确延迟数据:
function pingViaImage(url) {
return new Promise((resolve) => {
const img = new Image();
const start = Date.now();
img.onload = img.onerror = () => {
const latency = Date.now() - start;
resolve({ success: true, latency: latency + 'ms' });
};
img.src = url + '?t=' + Date.now(); // 避免缓存
});
}
WebSocket 实时延迟测试
适用于需要持续监控的场景:
function pingWebSocket(url) {
return new Promise((resolve) => {
const start = performance.now();
const ws = new WebSocket(url);
ws.onopen = () => {
const latency = performance.now() - start;
ws.close();
resolve({ success: true, latency: latency.toFixed(2) + 'ms' });
};
ws.onerror = () => resolve({ success: false });
});
}
注意事项
- 浏览器安全策略可能阻止跨域请求,需确保目标服务器支持 CORS。
- 测量结果包含网络延迟和服务器处理时间,非纯 ICMP ping。
- 高频请求可能触发速率限制,建议添加间隔控制。






