Spec-Zone.ru › Deno 2

Профилирование ЦП

Deno включает встроенную поддержку профилирования ЦП V8, которая помогает выявлять узкие места производительности в коде. Используйте флаг --cpu-prof, чтобы записать профиль ЦП во время выполнения программы:

›_
deno run --cpu-prof your_script.ts
# or with deno eval
deno eval --cpu-prof "for (let i = 0; i < 1e8; i++) {}"

После завершения программы Deno запишет файл .cpuprofile в текущий каталог (например, CPU.1769017882255.25986.cpuprofile). Этот файл можно загрузить в Chrome DevTools (вкладка Performance) или другие средства просмотра профилей V8 для анализа.

Флаги профилирования ЦП

Флаг Описание
--cpu-prof Включает профилирование ЦП. Профиль записывается на диск при завершении программы.
--cpu-prof-dir=<DIR> Каталог, в который будет записан профиль ЦП. По умолчанию используется текущий каталог. Неявно включает --cpu-prof.
--cpu-prof-name=<NAME> Имя файла профиля ЦП. По умолчанию — CPU.<timestamp>.<pid>.cpuprofile.
--cpu-prof-interval=<MICROSECONDS> Интервал выборки в микросекундах. Значение по умолчанию — 1000 (1 мс). Меньшие значения обеспечивают большую детализацию, но увеличивают размер файлов.
--cpu-prof-md Создаёт удобочитаемый отчёт Markdown рядом с файлом .cpuprofile.
--cpu-prof-flamegraph Создаёт интерактивную SVG-пламенную диаграмму рядом с файлом .cpuprofile.
Примечание

В профилях ЦП указаны номера строк транспилированного кода JavaScript, а не исходного кода TypeScript. Это ограничение профилировщика V8. Для файлов TypeScript указанные номера строк могут напрямую не совпадать с исходным кодом.

Настройка вывода профилей

По умолчанию профили записываются в текущий каталог и получают автоматически сгенерированное имя файла. Вы можете указать, где и как сохранять профили:

›_
# Save profiles to a specific directory
deno run --cpu-prof --cpu-prof-dir=./profiles your_script.ts

# Use a custom filename
deno run --cpu-prof --cpu-prof-name=my-profile.cpuprofile your_script.ts

# Increase sampling frequency for more detail (default: 1000μs)
deno run --cpu-prof --cpu-prof-interval=100 your_script.ts

Меньший интервал --cpu-prof-interval позволяет собирать больше образцов в секунду, обеспечивая более высокую точность за счёт увеличения размера файлов профиля. Значение по умолчанию — 1000 микросекунд (1 мс) — является оптимальным для большинства случаев. Для короткоживущих функций, которые нужно подробно профилировать, попробуйте 100 (0,1 мс).

Анализ профилей в Chrome DevTools

Чтобы проанализировать файл .cpuprofile:

  1. Откройте Chrome DevTools (F12)
  2. Перейдите на вкладку Performance
  3. Нажмите кнопку Load profile (значок стрелки вверх)
  4. Выберите файл .cpuprofile

DevTools отобразит пламенную диаграмму и подробную разбивку времени, затраченного в приложении.

Пример: отчёт Markdown

Флаг --cpu-prof-md создаёт сводку в формате Markdown, которую удобно читать без загрузки профиля в DevTools:

›_
deno run -A --cpu-prof --cpu-prof-md server.js

Будут созданы файл .cpuprofile и файл .md со следующим отчётом:

# CPU Profile

| Duration | Samples | Interval | Functions |
| -------- | ------- | -------- | --------- |
| 833.06ms | 641     | 1000us   | 10        |

**Top 10:** `op_crypto_get_random_values` 98.5%, `(garbage collector)` 0.7%,
`getRandomValues` 0.6%, `assertBranded` 0.2%

## Hot Functions (Self Time)

| Self% |     Self | Total% |    Total | Function                      | Location          |
| ----: | -------: | -----: | -------: | ----------------------------- | ----------------- |
| 98.5% | 533.00ms |  98.5% | 533.00ms | `op_crypto_get_random_values` | [native code]     |
|  0.7% |   4.00ms |   0.7% |   4.00ms | `(garbage collector)`         | [native code]     |
|  0.6% |   3.00ms |   0.6% |   3.00ms | `getRandomValues`             | 00_crypto.js:5274 |
|  0.2% |   1.00ms |   0.2% |   1.00ms | `assertBranded`               | 00_webidl.js:1149 |

## Call Tree (Total Time)

| Total% |    Total | Self% |     Self | Function                      | Location          |
| -----: | -------: | ----: | -------: | ----------------------------- | ----------------- |
|  16.8% |  91.00ms | 16.8% |  91.00ms | `(anonymous)`                 | server.js:1       |
|   0.6% |   3.00ms |  0.6% |   3.00ms | `getRandomValues`             | 00_crypto.js:5274 |
|  98.5% | 533.00ms | 98.5% | 533.00ms | `op_crypto_get_random_values` | [native code]     |

## Function Details

## `op_crypto_get_random_values`

[native code] | Self: 98.5% (533.00ms) | Total: 98.5% (533.00ms) | Samples: 533

Отчёт содержит:

  • Сводка: общая длительность, количество образцов, интервал выборки и количество функций
  • Топ-10: краткий обзор самых затратных функций
  • Горячие функции: функции, отсортированные по собственному времени (времени, проведённому непосредственно в функции, без учёта вызываемых ею функций)
  • Дерево вызовов: иерархическое представление стека вызовов и распределения времени
  • Сведения о функциях: разбивка по каждой функции с количеством образцов

Пример: интерактивная пламенная диаграмма

Флаг --cpu-prof-flamegraph создаёт автономную интерактивную пламенную диаграмму в формате SVG, которую можно открыть прямо в браузере — дополнительные инструменты не требуются:

›_
deno run --cpu-prof --cpu-prof-flamegraph your_script.ts

Будут созданы файл .cpuprofile и файл .svg. Откройте SVG в любом браузере, чтобы изучить профиль в интерактивном режиме:

  • Щёлкните любой фрейм, чтобы увеличить соответствующую ветвь
  • Кнопка Reset Zoom восстанавливает полный вид
  • Ctrl+F или кнопка Search позволяют искать функции с помощью регулярных выражений, подсветки и отображения процента совпадений
  • Флажок Invert переключает отображение на диаграмму-айсберг (корень сверху)
  • Наведите указатель на любой фрейм, чтобы увидеть имя функции и количество образцов

Пламенная диаграмма также работает с deno eval:

›_
deno eval --cpu-prof --cpu-prof-flamegraph "for (let i = 0; i < 1e8; i++) {}"

Советы по профилированию

  • Профилируйте типичные нагрузки: для HTTP-серверов отправляйте реалистичный трафик до остановки сервера — профиль фиксирует только то, что происходит во время работы программы.
  • Используйте собственное и общее время: в отчётах профилирования собственное время — это время, проведённое непосредственно в коде функции, а общее время включает время выполнения вызываемых ею функций. Большое собственное время указывает на настоящее узкое место; большое общее время при малом собственном означает, что функция делегирует работу чему-то затратному.
  • Сравнивайте результаты до и после изменений: сохраняйте профили с описательными значениями --cpu-prof-name (например, before-optimization.cpuprofile), чтобы после внесения изменений сравнивать профили рядом в DevTools.
  • Комбинируйте форматы вывода: можно использовать --cpu-prof-md и --cpu-prof-flamegraph вместе, чтобы получить все три результата (.cpuprofile, .md и .svg) за один запуск:
    ›_
    deno run --cpu-prof --cpu-prof-md --cpu-prof-flamegraph your_script.ts
    
  • Отфильтровывайте шум: в профиле короткоживущих программ может преобладать время запуска (загрузка модулей, JIT-компиляция). Чтобы получить более точные результаты, убедитесь, что нужный код выполняется достаточно долго для сбора значимых образцов.

Последнее обновление: 12 июня 2026 г.

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/fundamentals/cpu_profiling

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API