Console.timeEnd: примеры (JAVASCRIPT)
console.timeEnd(label: String): undefinedОписание функции console.timeEnd
Функция console.timeEnd() является частью Console API в JavaScript и предназначена для завершения измерения времени выполнения участка кода, который был начат с помощью функции console.time(). Она используется для профилирования и отладки производительности скриптов.
Функция вызывается с одним обязательным аргументом — меткой (label), которая должна совпадать с меткой, переданной в console.time(). При вызове функция выводит в консоль браузера или среду выполнения (например, Node.js) строку, содержащую метку и прошедшее время в миллисекундах.
Возвращаемое значение: функция console.timeEnd() не возвращает никакого значения (undefined). Ее основная задача — вывод информации в консоль. В некоторых средах, таких как Node.js, время также может быть доступно через высокоточные таймеры (process.hrtime.bigint()), но сам метод возвращает undefined.
Базовые примеры использования
Простейший пример измерения времени выполнения цикла:
console.time('Цикл for');
for (let i = 0; i < 1000000; i++) {
// Имитация работы
}
console.timeEnd('Цикл for');Цикл for: 12.345ms
Измерение времени асинхронной операции:
console.time('Запрос данных');
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
console.timeEnd('Запрос данных');
});Запрос данных: 456.789ms
Похожие функции в JavaScript
performance.now(): возвращает текущее время в миллисекундах с высокой точностью (до микросекунд). Позволяет вручную вычислять разницу между двумя замерами. Часто используется для более точных и гибких измерений, чем console.time().
const start = performance.now();
// Код для замера
const end = performance.now();
console.log(`Выполнено за ${end - start} мс`);Date.now(): возвращает текущее время в миллисекундах с начала эпохи Unix. Менее точен, чем performance.now(), но подходит для простых замеров с точностью до миллисекунды.
const start = Date.now();
// Код для замера
const end = Date.now();
console.log(`Выполнено за ${end - start} мс`);Выбор метода зависит от требуемой точности и удобства. console.time/timeEnd удобны для быстрой отладки, тогда как performance.now() лучше подходит для детального анализа производительности в продакшене.
Альтернативы в других языках программирования
Python: модуль time с функцией time.perf_counter().
import time
start = time.perf_counter()
# Код для замера
end = time.perf_counter()
print(f"Выполнено за {end - start:.6f} секунд")Выполнено за 0.123456 секунд
PHP: функция microtime(true).
$start = microtime(true);
// Код для замера
$end = microtime(true);
echo "Выполнено за " . ($end - $start) . " секунд";C: использование заголовочного файла time.h и функции clock().
#include <time.h>
#include <stdio.h>
int main() {
clock_t start = clock();
// Код для замера
clock_t end = clock();
double time_spent = (double)(end - start) / CLOCKS_PER_SEC;
printf("Выполнено за %f секунд\n", time_spent);
return 0;
}Основное отличие от JavaScript заключается в том, что в других языках обычно нет встроенной пары функций для автоматического вывода результата в консоль, и разработчику нужно вручную вычислять разницу и форматировать вывод.
Типичные ошибки
1. Несоответствие меток у console.time() и console.timeEnd(). Это приводит к предупреждению в консоли и отсутствию вывода времени.
console.time('метка1');
// Код
console.timeEnd('метка2'); // Ошибка: метки не совпадаютTimer 'метка2' does not exist
2. Многократный вызов console.timeEnd() с одной и той же меткой без перезапуска таймера. Второй и последующие вызовы также выводят предупреждение.
console.time('таймер');
// Код
console.timeEnd('таймер'); // Вывод времени
console.timeEnd('таймер'); // Ошибкатаймер: 10ms Timer 'таймер' does not exist
3. Использование зарезервированных или некорректных символов в метке. Хотя это редко приводит к ошибкам, может усложнить чтение вывода.
Изменения в последних версиях
Функция console.timeEnd() является стабильной частью Console API и не претерпевала существенных изменений в последних версиях ECMAScript. Однако, в различных средах выполнения могут быть добавлены улучшения. Например, в Node.js начиная с версии 10.0.0, время выводится с более высокой точностью. В браузерах реализация также следует стандартам, и существенных изменений в синтаксисе или поведении не было.
Важно отметить, что в некоторых современных средах, таких как Node.js, существуют альтернативные API для измерения производительности, например, модуль perf_hooks с функцией performance.now(), который обеспечивает наносекундную точность.
Расширенные примеры
Использование вложенных таймеров для замера разных этапов выполнения:
console.time('Общее время');
console.time('Этап 1');
// Код этапа 1
console.timeEnd('Этап 1');
console.time('Этап 2');
// Код этапа 2
console.timeEnd('Этап 2');
console.timeEnd('Общее время');Этап 1: 50.123ms Этап 2: 100.456ms Общее время: 150.579ms
Измерение времени выполнения асинхронных функций с использованием async/await:
async function fetchData() {
console.time('fetchData');
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const data = await response.json();
console.timeEnd('fetchData');
return data;
}
fetchData();Замер времени в циклах с накоплением результатов для статистики:
const times = [];
for (let i = 0; i < 5; i++) {
console.time(`Итерация ${i}`);
// Имитация различной нагрузки в каждой итерации
const delay = Math.random() * 100;
const start = Date.now();
while (Date.now() - start < delay) {}
console.timeEnd(`Итерация ${i}`);
}Итерация 0: 34.567ms Итерация 1: 67.890ms Итерация 2: 12.345ms Итерация 3: 89.123ms Итерация 4: 45.678ms
Использование в условиях для отладки медленных участков кода:
function processArray(arr) {
console.time('processArray');
let result = 0;
for (let i = 0; i < arr.length; i++) {
// Медленная операция для демонстрации
for (let j = 0; j < 10000; j++) {
result += arr[i] * j;
}
}
console.timeEnd('processArray');
return result;
}
processArray([1, 2, 3, 4, 5]);processArray: 250.123ms