← Назад к вопросам
Где посмотреть скорость исполнения кода?
2.0 Middle🔥 191 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Где посмотреть скорость исполнения кода
Краткий ответ
Для измерения скорости выполнения кода в JavaScript и на фронтенде есть несколько инструментов:
- DevTools Performance вкладка — для профилирования всего
- console.time() — для быстрых замеров
- performance.now() — для точных временных меток
- Chrome DevTools Profiler — для детального анализа
- Lighthouse — для оценки производительности всей страницы
console.time() — самый быстрый способ
console.time('operation');
for (let i = 0; i < 1000000; i++) {
// Код, который нужно измерить
}
console.timeEnd('operation');
// Вывод: operation: 45.123ms
Преимущества:
- Простой синтаксис
- Автоматически выводит результат в миллисекундах
- Удобно для быстрых измерений во время разработки
performance.now() — более точный способ
Для более точных измерений микросекунд:
const startTime = performance.now();
for (let i = 0; i < 1000000; i++) {
// Код
}
const endTime = performance.now();
console.log(`Время выполнения: ${endTime - startTime}ms`);
Возвращает время в миллисекундах с плавающей точкой (точность до микросекунд):
// performance.now() вернёт что-то вроде:
1234.567891234 // микросекундная точность
Chrome DevTools Performance Вкладка
Для анализа производительности всего скрипта:
Шаги:
- Откройте DevTools (F12 или Ctrl+Shift+I)
- Перейдите в вкладку Performance
- Нажмите красный круг (Record)
- Выполните действия (клики, скроллинг, загрузка)
- Нажмите Stop
- Изучите Timeline
Что видно:
- Временная шкала (главный поток)
- Long tasks (красные блоки) — скрипты дольше 50ms
- Rendering (зеленый) — перерисовка экрана
- Painting (фиолетовый) — отрисовка элементов
- Network запросы
- FPS (кадры в секунду)
Измерение React компонентов
Для профилирования React:
// Оберните компонент в Profiler
import { Profiler } from 'react';
function onRenderCallback(id, phase, actualDuration) {
console.log(`${id} (${phase}) took ${actualDuration}ms`);
}
<Profiler id="MyComponent" onRender={onRenderCallback}>
<MyComponent />
</Profiler>
Вывод:
MyComponent (mount) took 123.45ms
MyComponent (update) took 45.67ms
Lighthouse — оценка всей страницы
Встроен в Chrome DevTools:
- Откройте DevTools
- Вкладка Lighthouse
- Нажмите Analyze page load
- Получите оценку по:
- Performance (0-100)
- Accessibility
- Best Practices
- SEO
- PWA
Показывает метрики вроде:
- LCP (Largest Contentful Paint) — когда загружается основной контент
- FID (First Input Delay) — задержка при первом взаимодействии
- CLS (Cumulative Layout Shift) — непредвиденные смещения элементов
Memory Profiler
Для поиска утечек памяти:
- DevTools -> Memory вкладка
- Нажмите Take heap snapshot (снимок памяти)
- Выполните действие
- Возьмите второй снимок
- Сравните (покажет, что добавилось)
Практические примеры
Измерение функции:
function calculateFibonacci(n) {
if (n <= 1) return n;
return calculateFibonacci(n - 1) + calculateFibonacci(n - 2);
}
console.time('fibonacci');
const result = calculateFibonacci(40);
console.timeEnd('fibonacci');
// fibonacci: 5234.567ms
Измерение DOM операций:
console.time('DOM update');
for (let i = 0; i < 1000; i++) {
const div = document.createElement('div');
document.body.appendChild(div);
}
console.timeEnd('DOM update');
Сравнение подходов:
console.time('spread');
for (let i = 0; i < 100000; i++) {
const obj = { ...baseObj, newProp: i };
}
console.timeEnd('spread'); // spread: 23.456ms
console.time('Object.assign');
for (let i = 0; i < 100000; i++) {
const obj = Object.assign({}, baseObj, { newProp: i });
}
console.timeEnd('Object.assign'); // Object.assign: 34.567ms
Рекомендации
- Для быстрых замеров: используйте console.time()
- Для точных измерений: performance.now()
- Для поиска узких мест: Chrome DevTools Performance
- Для оценки всей страницы: Lighthouse
- Для React компонентов: React Profiler или DevTools расширение
- Избегайте console.log() при каждом обновлении — замедляет выполнение
- Помните: время в DevTools может отличаться от реального (браузер оптимизирует)