Вы когда-нибудь сталкивались с ужасной ошибкой «TypeError: global. Performance.now is not a function» при работе с JavaScript? Если да, не волнуйтесь, вы не одиноки! Эта ошибка часто появляется, когда вы пытаетесь использовать метод performance.now()для измерения временных интервалов в своем коде. В этой статье блога мы подробно рассмотрим эту ошибку, поймем ее распространенные причины и изучим альтернативные методы достижения высокой производительности синхронизации в JavaScript. Итак, приступим!
Понимание ошибки:
Сообщение об ошибке «TypeError: global. Performance.now is not a function» указывает на то, что метод nowнедоступен для объекта performance. Эта проблема обычно возникает в средах, где объект performanceне поддерживается или был переопределен.
Альтернативные методы определения времени:
-
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`); -
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`); -
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`); -
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.
Освоив эти методы синхронизации, вы сможете оптимизировать свой код, повысить производительность и обеспечить удобство взаимодействия с пользователем. Приятного кодирования!