You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Node.js计时方法的性能?

在Node.js中测量/分析应用各部分执行耗时的方案

我经常用类似的工具来做Node.js应用的性能分析,刚好可以给你整理一套靠谱的方案——既能兼容浏览器的performance.now,又能利用Node.js的高精度计时能力来测量代码执行耗时:

核心工具代码(兼容多环境)

// 兼容window.performance.now的polyfill,确保在Node和浏览器环境都能运行
var performance = global.performance || {};
var performanceNow = performance.now || 
                     performance.mozNow || 
                     performance.msNow || 
                     performance.oNow || 
                     performance.webkitNow || 
                     function(){ 
                         // 降级方案:用Date.getTime()获取毫秒级时间戳
                         return (new Date()).getTime(); 
                     };

// 生成高精度时间戳或计算时间差,逻辑参考Node.js的process.hrtime
function hrtime(previousTimestamp) {
    var clocktime = (performanceNow() * 1e-3); // 转换为秒为单位
    var seconds = Math.floor(clocktime);
    var nanoseconds = Math.floor((clocktime % 1) * 1e9); // 提取纳秒部分

    if (previousTimestamp) {
        // 计算与之前时间戳的差值
        seconds = seconds - previousTimestamp[0];
        nanoseconds = nanoseconds - previousTimestamp[1];
        // 处理纳秒为负的情况:借1秒转换为纳秒
        if (nanoseconds < 0) {
            seconds--;
            nanoseconds += 1e9;
        }
    }
    return [seconds, nanoseconds];
}

怎么用它来测量代码耗时?

  • 步骤1:标记计时起点
    在你要分析的代码段开头,调用hrtime()获取初始时间戳:

    const startTime = hrtime();
    
  • 步骤2:执行要测量的代码
    比如你要测的业务逻辑:

    // 这里放你要测量耗时的代码,比如数据库查询、复杂计算等
    await fetchSomeData();
    processComplexLogic();
    
  • 步骤3:计算并输出耗时
    代码执行完成后,把初始时间戳传入hrtime(),就能得到时间差,再转换成易读的格式:

    const timeDiff = hrtime(startTime);
    // 转换为毫秒(保留3位小数)
    const elapsedMs = timeDiff[0] * 1000 + timeDiff[1] / 1e6;
    console.log(`这段代码执行耗时:${elapsedMs.toFixed(3)}ms`);
    
  • 额外用法:直接获取当前高精度时间
    如果不传入参数,hrtime()会返回当前的高精度时间戳(格式为[秒, 纳秒]),和performance.now()的作用一致,方便你在不同环境下统一使用时间戳。

为什么推荐这个方案?

  • 跨环境兼容:不管是在Node.js服务端还是浏览器前端,都能无缝运行,不用写两套不同的计时逻辑。
  • 高精度:支持纳秒级的时间计算,比普通的Date.getTime()精度高得多,适合测量短时间内的代码执行(比如几毫秒的函数调用)。
  • 对齐标准API:polyfill部分完全遵循window.performance.now的规范,学习成本低,团队里的前端同学也能快速上手。

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:22:52