Console.time: примеры (JAVASCRIPT)
console.time(label: String): undefinedФункция console.time
Метод console.time() в JavaScript используется для замера времени выполнения участков кода. Он входит в состав объекта Console и доступен в браузерах и среде Node.js. Функция полезна при профилировании и оптимизации производительности.
Для запуска таймера вызывается console.time(label) с единственным необязательным аргументом:
- label (строка) — уникальная метка для идентификации таймера. Если аргумент опущен, используется значение по умолчанию
"default".
Для остановки таймера и вывода результата в консоль используется парный метод console.timeEnd(label) с такой же меткой. В консоль выводится сообщение вида: "<метка>: <время> ms", где время — количество миллисекунд между запуском и остановкой таймера. Функции не возвращают значений.
Метод console.timeLog(label) позволяет вывести текущее значение таймера без его остановки.
Простые примеры использования
Пример с меткой по умолчанию:
console.time();
for (let i = 0; i < 1000000; i++) {}
console.timeEnd();default: 1.234ms
Пример с пользовательской меткой:
console.time('myTimer');
setTimeout(() => {
console.timeEnd('myTimer');
}, 100);myTimer: 101.456ms
Использование timeLog для промежуточного замера:
console.time('loop');
for (let i = 0; i < 5; i++) {
let sum = 0;
for (let j = 0; j < 1000000; j++) {
sum += j;
}
console.timeLog('loop', `Итерация ${i} завершена`);
}
console.timeEnd('loop');loop: 12.345ms Итерация 0 завершена loop: 24.567ms Итерация 1 завершена loop: 37.890ms Итерация 2 завершена loop: 49.012ms Итерация 3 завершена loop: 61.234ms Итерация 4 завершена loop: 61.235ms
Альтернативы в JavaScript
performance.now() — метод, возвращающий высокоточную временную метку в миллисекундах с момента загрузки страницы или запуска процесса Node.js. Предпочтительнее для точных замеров, например, в анимациях или бенчмарках.
const start = performance.now();
for (let i = 0; i < 1000000; i++) {}
const end = performance.now();
console.log(`Выполнение заняло ${end - start} мс`);Date.now() — возвращает текущее время в миллисекундах с 1 января 1970 года. Менее точен, чем performance.now(), но подходит для простых замеров.
console.profile() и console.profileEnd() — инструменты для профилирования производительности с более детальной информацией в панели разработчика.
Аналоги в других языках
Python (модуль timeit):
import timeit
def test():
return sum(range(1000000))
print(timeit.timeit(test, number=1))0.032456
PHP (microtime):
$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {}
$end = microtime(true);
echo $end - $start;C (clock из time.h):
#include <time.h>
#include <stdio.h>
int main() {
clock_t start = clock();
for (long i = 0; i < 1000000; i++) {}
clock_t end = clock();
printf("%f", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}В отличие от JavaScript, эти методы обычно требуют ручного вычисления разницы между началом и концом.
Распространенные ошибки
Несоответствие меток при запуске и остановке таймера приводит к предупреждению:
console.time('timer1');
console.timeEnd('timer2');Warning: No such label 'timer2' for console.timeEnd()
Попытка повторного запуска таймера с той же меткой перезаписывает его, что может сбить замеры:
console.time('t');
// какой-то код
console.time('t'); // Таймер 't' сбрасывается
console.timeEnd('t'); // Замер будет короче ожидаемогоИспользование нестроковых меток приводит к их неявному преобразованию, что иногда вызывает путаницу:
console.time(123); // Метка становится строкой "123"
console.timeEnd('123'); // Работает
console.timeEnd(123); // Тоже работаетИстория изменений
Метод console.time был стандартизирован в спецификации Console API. В современных версиях браузеров и Node.js добавлена поддержка дополнительного аргумента в console.timeLog() для вывода дополнительных данных. Ранние реализации не поддерживали метки, сейчас же рекомендуется их использовать для работы с несколькими таймерами. В Node.js метод доступен с версии 0.1.x.
Расширенные примеры
Сравнение скорости двух алгоритмов:
console.time('algorithmA');
let resultA = 0;
for (let i = 0; i < 1000000; i++) {
resultA += i * i;
}
console.timeEnd('algorithmA');
console.time('algorithmB');
let resultB = 0;
let square;
for (let i = 0; i < 1000000; i++) {
square = i * i;
resultB += square;
}
console.timeEnd('algorithmB');algorithmA: 4.123ms algorithmB: 3.987ms
Измерение времени асинхронной операции:
async function fetchData() {
console.time('fetch');
await fetch('https://jsonplaceholder.typicode.com/posts/1');
console.timeEnd('fetch');
}
fetchData();Вложенные таймеры для анализа сложных процессов:
console.time('total');
console.time('phase1');
// Фаза 1
for (let i = 0; i < 500000; i++) {}
console.timeEnd('phase1');
console.time('phase2');
// Фаза 2
for (let i = 0; i < 700000; i++) {}
console.timeEnd('phase2');
console.timeEnd('total');phase1: 2.100ms phase2: 3.400ms total: 5.500ms
Использование внутри условных конструкций для выборочного замера:
const DEBUG = true;
DEBUG && console.time('debugTimer');
// Код для отладки
if (DEBUG) {
console.timeLog('debugTimer', 'Промежуточный результат');
// Дополнительный код
console.timeEnd('debugTimer');
}