ReferenceError: prestatie is niet gedefinieerd bij gebruik van performance.now()

Ik krijg een foutmelding ReferenceError: performance is not definedwanneer ik performance.now()om de uitvoeringstijd van een functieaanroep te meten:

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;
      }
    }

Enig idee hoe ik dit kan oplossen?


Antwoord 1, autoriteit 100%

Ik weet dat dit front-end is getagd, maar als iemand dit tegenkomt op zoek naar een node.js-oplossing (zoals ik), moet je eerst de prestaties van de module perf_hooks(beschikbaar in node 8.5+).

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

Antwoord 2, autoriteit 15%

Aangezien de ‘perf_hook’-module meerdere constructies (objecten, functies, constanten, enz.) exporteert, moet je expliciet specificeren welke constructie je wilt gebruiken. In dit geval heeft u de constructie performancenodig. De aangifte kan op twee manieren worden gedaan:

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

of

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

Antwoord 3, autoriteit 6%

Je verliest type-informatie wanneer je requiregebruikt, dus de beste manier om “prestaties” te importeren met TypeScript is het gebruik van een import-instructie:

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');

Zorg er ook voor dat u @types/nodeheeft opgegeven in uw “afhankelijkheden” van “package.json”.

Getest met TypeScript 4 & Node.js 14.


Antwoord 4, autoriteit 5%

ja! zoals bovenstaande antwoorden moet je dit toevoegen..

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

maar u kunt performance.now()uitvoeren in uw browserconsole of in uw browser -> tabblad bron -> fragment zonder bovenstaande code toe te voegen.

je kunt dit lezen om hier meer over te weten te komen..

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

Other episodes