Профилировщик

Начиная с версии 3.2.0 (бета).

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

Вкладка доступна только администраторам. На ней виден лишь её значок — секундомер — между вкладками Ошибки и Поиск кода; название появляется при наведении. Вкладка отключается в окне Настройки Ninext, раздел «Менеджер скриптов»: параметр Профилировщик формул.

Запуск и остановка измерения

Основная кнопка, Начать измерение, принимает название выбранного способа запуска (Запуск при первом вычислении, Запуск при следующем щелчке); во время измерения она превращается в Остановить измерение. Маленькая кнопка рядом, на которой видны значки выбранных способов запуска и остановки, открывает меню Выбрать пусковое событие, состоящее из двух частей. Первая определяет, когда начинается измерение:

ЗапускДействие
Немедленный запускИзмерение начинается по щелчку. Это настройка по умолчанию.
При первом вычисленииИзмерение начинается со следующего вычисления формулы, которое служит началом отсчёта времени.
При следующем щелчкеИзмерение начинается при следующем щелчке вне вкладки «Профилировщик». До тех пор кнопка превращается в Отмена.

Вторая — когда оно останавливается:

ОстановкаДействие
Ручная остановкаКнопкой Остановить измерение. Это настройка по умолчанию.
Остановка через 10, 30 или 60 сОбратный отсчёт начинается с момента запуска измерения.
По завершении вычисленияПредлагается вместе с «При первом вычислении»: измерение останавливается, когда это вычисление завершается, включая его асинхронное продолжение.
При отпускании кнопки мышиПредлагается вместе с «При следующем щелчке»: измерение останавливается, когда вы отпускаете кнопку мыши. То, что продолжается после этого асинхронно, не измеряется.

Так вы измеряете только то, что вас интересует: открытие записи, нажатие кнопки, вычисление представления. Этот выбор действует до перезагрузки страницы.

Пока измерение ждёт своего пускового события, строка состояния показывает «Взведено — ожидание пускового события…». Во время измерения она показывает, сколько секунд оно уже идёт, число зафиксированных вычислений и число различных формул.

Полезно знать

Запуск нового измерения не очищает предыдущие результаты: вычисления накапливаются от измерения к измерению — в таблице, в счётчиках и в хронологии, — пока вы не нажмёте Очистить. Каждое измерение начинается с нуля на оси времени, поэтому полосы двух последовательных измерений накладываются друг на друга в начале хронологии. Чтобы увидеть одно измерение отдельно, нажмите Очистить перед его запуском.

Хронология

Каждое вычисление — полоса на оси времени. Вложенные или одновременные вычисления располагаются друг над другом на нескольких строках; у каждой формулы свой цвет, а полупрозрачная полоса — это ещё идущее вычисление. На достаточно широких полосах написано имя их поля («Таблица ▸ Поле»), а для вызовов плагина перед ним стоит «Ninext ▸». Вид заполняется в реальном времени. Он хранит не более 20 000 вычислений: сверх этого примечание сообщает число отброшенных вычислений, которые учитывает уже только таблица.

Масштабирование:

  • колёсико мыши или сведение пальцев на сенсорной панели в Chrome масштабирует изображение под указателем (движение двумя пальцами прокручивает его);
  • двойной щелчок по полосе выделяет её и приближает;
  • три кнопки: Вместить весь сеанс, Уменьшить масштаб времени и Увеличить масштаб времени.

Таблица

Табличное представление Профилировщика

Таблица группирует вычисления по формулам:

КолонкаСодержимое
ФормулаИзмеряемая формула.
ВызовыЧисло вычислений.
Всего (мс)Суммарное время.
Среднее (мс)Среднее время одного вычисления.
Макс (мс)Самое долгое вычисление.

Таблица отсортирована по суммарному времени — от самых затратных формул к наименее затратным — и обновляется каждую секунду; показываются первые 100 строк, и сверх этого об этом сообщает примечание («Показано 100 строк из N — сначала самые затратные.»). Если различных формул больше 1 000, следующие объединяются в строку «… прочие формулы». Формула схемы представлена так же, как на вкладке Поля и формулы: навигационная цепочка, «Fx», кнопка изменения, — с пометкой «+N», когда та же формула находится в нескольких местах. Метка «Ninext» отмечает вызовы, запущенные плагином.

Подробности вычисления

Подробности вычисления в Профилировщике

Щелчок по полосе или по строке открывает подробности:

  • полный код формулы;
  • для полосы: Начало, Длительность, Запись и Цепочка вызовов — от корневого вычисления до текущего, причём каждое звено кликабельно; для строки таблицы — Измерения (число вызовов, суммарное, среднее и максимальное время);
  • Источник — для вызова, запущенного Ninext;
  • Переменные (инспекция) — для вычисления инспектируемой формулы (см. ниже);
  • Расположения формулы в схеме, с кнопкой перехода к коду;
  • внизу — Приблизить это вычисление и Инспектировать эту формулу.

Инспекция формулы

Выберите формулу в таблице или в хронологии, затем нажмите Инспектировать эту формулу. Во время измерения при каждом вычислении этой формулы профилировщик фиксирует значение каждой переменной, объявленной через var или let: краткий вид значения, а при наведении — его тип.

Вкладка Инспекция перечисляет эти вычисления, самое свежее — вверху; щелчок по одному из них находит его в хронологии. Инспектировать можно только одну формулу за раз; Остановить инспекцию завершает её.

Два ограничения: повторные присваивания и переменные цикла не фиксируются, а время инспектируемой формулы становится ориентировочным, поскольку сама фиксация занимает время.

Как читать цифры

  • Время включающее: формула учитывает и время формул, которые она вычисляет.
  • Для асинхронного вычисления время идёт до его завершения, включая загрузку данных.
  • Два поля с абсолютно одинаковой формулой занимают одну строку таблицы.
  • Измеряются формулы, триггеры, колонки представлений, код Консоли и вызовы Ninext. Собственный JavaScript Ninext не измеряется.
  • Измерение обходится лишь в несколько микросекунд на вычисление, а вне измерения ничего не стоит. Результаты хранятся в памяти: они исчезают при перезагрузке страницы.