Освоение высокопроизводительного тайминга в JavaScript: раскрытие тайны «TypeError: global. Performance.now is not a function»

Вы когда-нибудь сталкивались с ужасной ошибкой «TypeError: global. Performance.now is not a function» при работе с JavaScript? Если да, не волнуйтесь, вы не одиноки! Эта ошибка часто появляется, когда вы пытаетесь использовать метод performance.now()для измерения временных интервалов в своем коде. В этой статье блога мы подробно рассмотрим эту ошибку, поймем ее распространенные причины и изучим альтернативные методы достижения высокой производительности синхронизации в JavaScript. Итак, приступим!

Понимание ошибки:

Сообщение об ошибке «TypeError: global. Performance.now is not a function» указывает на то, что метод nowнедоступен для объекта performance. Эта проблема обычно возникает в средах, где объект performanceне поддерживается или был переопределен.

Альтернативные методы определения времени:

  1. Date.now():
    Одной из самых простых альтернатив performance.now()является метод Date.now(). Он возвращает текущую метку времени в миллисекундах и широко поддерживается в различных средах JavaScript.

    const startTime = Date.now();
    // Code to be timed
    const endTime = Date.now();
    const elapsedTime = endTime - startTime;
    console.log(`Elapsed time: ${elapsedTime}ms`);
  2. window. Performance.timing:
    Если вы работаете в среде браузера, вы можете использовать объект window.performance.timingдля измерения информации о времени. Он предоставляет различные свойства, такие как navigationStart, loadEventStartи т. д., которые можно использовать для расчета временных интервалов.

    const startTime = window.performance.timing.navigationStart;
    // Code to be timed
    const endTime = window.performance.timing.loadEventStart;
    const elapsedTime = endTime - startTime;
    console.log(`Elapsed time: ${elapsedTime}ms`);
  3. process.hrtime():
    Если вы работаете с Node.js, метод process.hrtime()можно использовать для измерения временных интервалов с высоким разрешением. Он возвращает массив с количеством секунд и наносекунд, прошедших с произвольного времени.

    const startTime = process.hrtime();
    // Code to be timed
    const endTime = process.hrtime(startTime);
    const elapsedTime = (endTime[0] * 1e9 + endTime[1]) / 1e6; // Convert to milliseconds
    console.log(`Elapsed time: ${elapsedTime}ms`);
  4. API PerformanceObserver.
    Для более сложных сценариев синхронизации можно использовать API PerformanceObserver. Он позволяет вам наблюдать и фиксировать события, связанные с производительностью, в вашем коде, обеспечивая большую гибкость и контроль.

    const observer = new PerformanceObserver((list) => {
     const entries = list.getEntries();
     for (const entry of entries) {
       console.log(`Name: ${entry.name}, Duration: ${entry.duration}ms`);
     }
    });
    observer.observe({ entryTypes: ['measure'], buffered: true });
    // Code to be timed
    performance.mark('start');
    // Code to be timed
    performance.mark('end');
    performance.measure('MyCode', 'start', 'end');

Ошибка «TypeError: global. Performance.now is not a function» может расстраивать, когда вы пытаетесь измерить временные интервалы в JavaScript. Однако, используя альтернативные методы синхронизации, такие как Date.now(), window.performance.timing, process.hrtime()или API PerformanceObserver, вы можете решить эту проблему и добиться точных высоких результатов. время производительности в вашем коде. Не забудьте выбрать метод, который лучше всего подходит для вашего конкретного случая использования и среды JavaScript.

Освоив эти методы синхронизации, вы сможете оптимизировать свой код, повысить производительность и обеспечить удобство взаимодействия с пользователем. Приятного кодирования!