ReferenceError:使用performance.now()时未定义性能

时间:2017-09-26 22:50:30

标签: javascript typescript frontend

我在尝试使用std::noskipws来衡量函数调用的执行时间时收到错误ReferenceError: performance is not defined

export async function find(someId: string, ctx: context.IContext) {

      try {
        var t0 = performance.now();

        var res = someModel.find(someId, ctx.cookies);

        var t1 = performance.now();
        console.log("Call to find took " + (t1 - t0) + " milliseconds.");

        return res;
      } catch (err) {
        console.error(err);
        throw err;
      }
    }

我有什么想法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:12)

我知道这是标记的前端但是如果有人遇到这个寻找node.js解决方案(像我一样),你需要首先要求 perf_hooks 模块的性能(在节点中可用) 8.5 +)。

const {performance} = require('perf_hooks');
const t0 = performance.now();
...

答案 1 :(得分:3)

使用 require 时会丢失类型信息,因此使用 TypeScript 导入“性能”的最佳方法是使用 import 语句:

import {performance, PerformanceObserver} from 'perf_hooks';

const observer = new PerformanceObserver(items => items.getEntries().forEach((entry) => console.log(entry)));    
observer.observe({entryTypes: ['measure']});

performance.mark('start');
performance.mark('stop');
performance.measure('Measurement', 'start', 'stop');

还要确保您在“package.json”的“依赖项”中声明了 @types/node

使用 TypeScript 4 和 Node.js 14 进行测试。

答案 2 :(得分:2)

由于'perf_hook'模块导出多个构造(对象,函数,常量等),因此您将需要明确指定要使用的构造。在这种情况下,您需要performance构造。声明可以通过两种方式完成:

const performance = require('perf_hooks').performance;

const { performance } = require('perf_hooks'); //object destructuring

答案 3 :(得分:1)

是的!像上面的答案一样,您需要添加此内容。

const {
      performance,
      PerformanceObserver
    } = require('perf_hooks');

但是您可以在浏览器控制台内或浏览器中运行performance.now(),而无需添加上述代码。

您可以阅读以进一步了解此内容。

https://nodejs.org/api/perf_hooks.html#perf_hooks_performance_now