Введение
В этом лабораторном занятии мы углубимся в измерение производительности JavaScript-функций с использованием концепции частоты в Герцах. Мы узнаем, как использовать метод performance.now() для вычисления времени, затраченного на выполнение функции, и как определить количество циклов в секунду. С помощью практических примеров и упражнений мы исследуем различия в производительности между различными реализациями одной и той же функции.
Вычисление частоты функции
Для измерения частоты выполнения функции в секунду (hz/hertz) используйте функцию hz. Вы можете сделать это, следуя шагам:
- Откройте Терминал/SSH и введите
node, чтобы начать практиковаться в написании кода. - Используйте
performance.now()для получения разницы в миллисекундах до и после итерационного цикла, чтобы вычислить время, затраченное на выполнение функцииiterationsраз. - Преобразуйте миллисекунды в секунды и разделите на время, затраченное, чтобы вернуть количество циклов в секунду.
- Если вы хотите использовать значение по умолчанию 100 итераций, опустите второй аргумент,
iterations.
const hz = (fn, iterations = 100) => {
const before = performance.now();
for (let i = 0; i < iterations; i++) fn();
return (1000 * iterations) / (performance.now() - before);
};
Вот пример использования функции hz для сравнения производительности двух функций, которые вычисляют сумму массива из 10 000 чисел:
const numbers = Array(10000)
.fill()
.map((_, i) => i);
const sumReduce = () => numbers.reduce((acc, n) => acc + n, 0);
const sumForLoop = () => {
let sum = 0;
for (let i = 0; i < numbers.length; i++) sum += numbers[i];
return sum;
};
Math.round(hz(sumReduce)); // 572
Math.round(hz(sumForLoop)); // 4784
В этом примере sumReduce работает быстрее, чем sumForLoop, потому что у нее частота выполнения функции ниже.
Резюме
Поздравляем! Вы завершили лабораторную работу по частоте функции в Герцах. Вы можете практиковаться в других лабораторных работах в LabEx, чтобы улучшить свои навыки.