
我想给用户展示当前网络质量,比如“差、中、好”。那我在开发时要如何做网络测速并给出简单的质量评分?
相关代码:
async function speedTest() {
const start = Date.now();
await http.request('https://example.com/ping');
const latency = Date.now() - start;
console.log(latency < 100 ? 'good' : 'poor');
}

这个很简单啊。可以通过以下步骤实现:
- 申请网络访问权限
- 使用鸿蒙的网络 API 获取当前网络类型
- 通过请求特定资源进行简单测速
- 根据测速结果给出质量评分

在鸿蒙开发中,可以通过测量网络延迟来判断网络质量(差、中、好)。参考您提供的代码逻辑(基于延迟检测),并结合鸿蒙的 @ohos.net.http 模块实现。以下是详细步骤和代码示例:
实现原理
核心逻辑:
发送一个轻量级 HTTP 请求(如 Ping 测试),测量请求耗时(延迟)。
根据延迟值划分网络质量等级:
好:延迟 < 100ms
中:100ms ≤ 延迟 < 300ms
差:延迟 ≥ 300ms
(阈值可自定义,此处参考您的代码优化为三级评分)
关键模块:
使用鸿蒙的 @ohos.net.http 模块发送 HTTP 请求,通过 Date.now() 计算时间差。
完整代码示例(ARKTS)
TypeScript
import http from '@ohos.net.http'; // 鸿蒙网络模块
import { BusinessError } from '@ohos.base';
// 网络测速与评分函数
async function speedTest(): Promise<string> {
const testUrl = 'https://example.com/ping'; // 测试目标,推荐使用低负载服务器
const startTime = Date.now(); // 记录开始时间
try {
// 创建HTTP请求
const httpRequest = http.createHttp();
// 发送GET请求(轻量级Ping测试)
await httpRequest.request(testUrl, {
method: http.RequestMethod.GET,
connectTimeout: 5000, // 超时时间设为5秒
});
const endTime = Date.now(); // 记录结束时间
const latency = endTime - startTime; // 计算延迟(ms)
// 网络质量评分
if (latency < 100) {
return '好';
} else if (latency < 300) {
return '中';
} else {
return '差';
}
} catch (error) {
// 请求失败时直接评为"差"
console.error('网络请求失败:', (error as BusinessError).message);
return '差';
}
}
// 在页面中调用示例
@Entry
@Component
struct NetworkSpeedPage {
@State networkQuality: string = '检测中...';
build() {
Column() {
Button('开始测速')
.onClick(async () => {
this.networkQuality = await speedTest();
})
Text('网络质量: ' + this.networkQuality)
.fontSize(20)
.margin(10)
}
}
}
代码说明
延迟测量:
使用 Date.now() 捕获请求前后的时间戳,差值即为延迟。
Ping 测试选择 GET 请求到轻量级 URL(如 https://example.com/ping),减少数据传输影响延迟精度。
错误处理:
添加 try/catch 捕获超时或请求失败,直接返回“差”评级。
设置 connectTimeout: 5000 防止长时间阻塞。
阈值优化:
参考您的代码 (latency < 100 ? 'good' : 'poor'),扩展为三级评分。
实际应用可调整阈值(例如:移动网络下可放宽至 好: <150ms, 中: 150-500ms, 差: >500ms)。
性能建议:
多次测试取平均值(如连续测3次)提升准确性。
使用低负载服务器:避免目标服务器延迟影响结果,建议自建 Ping 服务或选择稳定 CDN。
