【问题标题】:Writing a function to compute execution time in both Node and browser?编写一个函数来计算节点和浏览器中的执行时间?
【发布时间】:2020-01-07 03:26:04
【问题描述】:

我在想怎么写一个干净的函数,Node和浏览器都支持,但是感觉解决方案的干净度没有想象中那么好。

用条件来检查窗口对象的存在会不会很麻烦?

if (typeof window !== undefined)
    // node computation
else 
    // browser computation

但我也想要一种简洁的方法来计算某些操作前后的总执行时间。我该怎么办?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    performance API 由 W3C recommendation 指定,可在 Node 和浏览器中使用。

    在 Node 中,您需要包含 perf_hooks

    只需performance.now(),您就可以进行基本的计时操作:

    // Detect existance of `performance`. If not defined (Node), require it
    var performance = performance || require('perf_hooks').performance;
    
    let start = performance.now();
    
    let j = 1;
    for (let i = 0; i < 1000000; i++) j = j*2+1;
    
    console.log((performance.now() - start).toFixed(2) + "ms");

    相同的代码在 repl.it 的 Node 上运行。

    【讨论】:

    • 代码中是否需要根据Node或浏览器有条件地使用这个?我看到 Module not found: Error: Can't resolve 'perf_hooks' 并且我需要该模块的性能。
    • 确实,你需要有条件地要求 perf_hook。条件是您是否定义了performance。我更新了我的答案,包括一个指向 repl.it 的链接,您可以在其中看到在 Node 上运行的相同代码。
    • 由于某种原因,我仍然收到“错误:无法解析'perf_hooks'”,即使它是本机节点模块。这有什么原因吗?我正在使用 webpack
    • 你的 Node 版本是多少?
    • 10.15是使用node -v的版本
    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2021-07-15
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多