HarmonyOS鸿蒙Next中如何测量JavaScript函数的精确执行时间(纳秒级)?
HarmonyOS鸿蒙Next中如何测量JavaScript函数的精确执行时间(纳秒级)?
我们需要 benchmark 两个算法的性能差异,但 Date.now() 精度只有毫秒。
4 回复
使用 timer.performanceNow()(高精度单调时钟):
import timer from '@ohos:timer';
const start = timer.performanceNow(); // 返回 double,单位毫秒,精度 ~1μs
myAlgorithm();
const duration = timer.performanceNow() - start;
console.log(`耗时: ${duration.toFixed(3)} ms`);
该时钟不受系统时间调整影响,适合微基准测试。
在HarmonyOS鸿蒙Next中,测量JavaScript函数纳秒级执行时间可使用performance.now()。该方法返回高精度时间戳,单位毫秒但精度可达微秒级。通过计算函数执行前后的时间差来获取执行时长。示例代码:
const start = performance.now();
// 执行待测函数
const end = performance.now();
const duration = end - start; // 单位为毫秒,可转换为纳秒
注意系统性能可能影响实际测量精度。
在HarmonyOS Next中,要测量JavaScript函数纳秒级的精确执行时间,推荐使用performance.now() API。它提供了高精度的时间戳,精度可达微秒级(百万分之一秒),足以满足大多数性能基准测试的需求。
核心方法:
const startTime = performance.now();
// 执行你的算法或函数
yourFunction();
const endTime = performance.now();
const executionTimeNs = (endTime - startTime) * 1_000_000; // 转换为纳秒
console.log(`执行时间: ${executionTimeNs} 纳秒`);
关键说明:
performance.now()返回的是从页面加载开始经过的时间(或应用启动开始,具体取决于上下文),而不是系统时间。- 返回值以毫秒为单位,但带有小数部分,实际精度通常为微秒级(如 0.001 毫秒,即 1 微秒)。
- 通过乘以 1,000,000 可将结果转换为纳秒,但请注意实际测量精度受系统限制,可能无法达到真正的纳秒级分辨率。
注意事项:
- 避免在单次执行中测量,应多次运行取平均值以减少误差。
- 测量时确保没有其他高优先级任务干扰。
- 对于极短函数的测量,建议使用循环多次执行后计算平均时间。
示例代码(多次测量取平均):
function measurePerformance(fn, iterations = 1000) {
const start = performance.now();
for (let i = 0; i < iterations; i++) {
fn();
}
const totalTimeNs = (performance.now() - start) * 1_000_000;
return totalTimeNs / iterations;
}
这种方法在HarmonyOS Next的ArkTS/JavaScript环境中是标准的高精度性能测量方案。


