Честное измерение производительности
Spec: ISO/IEC 25010ISO/IEC 25010Spec: ISO/IEC 17025ISO/IEC 17025
Результат измерения без описания метода почти ничего не говорит. Фраза “NextPDF отрисовывает документ за N миллисекунд” ничего не значит, пока неизвестны документ, оборудование, число прогонов и разброс. На этой странице объясняется, как NextPDF измеряет производительность, почему сообщает о ней как о проверяемом сигнале, а не как о громком числе, и почему не публикует голый показатель скорости.
Почему это важно
Заголовок раздела «Почему это важно»Заявления о производительности легко опубликовать и легко исказить, чаще всего случайно. Один прогретый прогон на простаивающем ноутбуке, самый быстрый результат из десяти попыток или микротест функции, которую никто не вызывает на горячем пути, — всё это может дать реальное число, которое ничего не предсказывает о вашей нагрузке. Spec: ISO/IEC 25010ISO/IEC 25010 определяет эффективность производительности как выполнение функций в пределах параметров времени и пропускной способности в заданных условиях (ISO/IEC 25010, §3.10). Уберите “в заданных условиях” — и число перестаёт быть измерением. Оно становится числом без смысла.
Есть и более незаметный сбой: число, которое когда-то было верным. Как только вы вставляете результат измерения в текст, он застывает. Тем временем код, среда выполнения и оборудование продолжают меняться. Устаревшее заявление “быстро” не просто бесполезно. Оно ошибочно, причём незаметно.
Если коротко
Заголовок раздела «Если коротко»- Показатель производительности не имеет смысла без описания метода: входных данных, среды, числа прогонов, правил прогрева и разброса.
- NextPDF измеряет с помощью повторных прогонов, отбрасывает итерации прогрева и сообщает распределение, а не одно лучшее значение.
- Обнаружение регрессий — статистическое: результат сравнивается с базовой линией с помощью t-критерия Уэлча, поэтому изменение должно быть одновременно статистически значимым и достаточно большим, чтобы иметь значение, прежде чем его засчитают как регрессию.
- Нестабильная среда обнаруживается и фиксируется, а не незаметно усредняется: высокий разброс между прогонами делает результат недействительным, а не скрывается в среднем значении.
- Производительность публикуется как живой сигнал, генерируемый вместе со сборкой, а не как застывшее громкое число — именно поэтому на этой странице нет ни одного значения в миллисекундах.
Как к этому подходит NextPDF
Заголовок раздела «Как к этому подходит NextPDF»Шлюз производительности движка — это статистический тест, а не один прогон с замером времени. Задокументированная методика многократно запускает измеряемый набор, отбрасывает заданное число прогонов прогрева и вычисляет среднее, стандартное отклонение и коэффициент вариации как для длительности, так и для памяти. Затем она сравнивает текущий результат с зафиксированной базовой линией:
- RepeatRun the measured suite N times under fixed conditions.
- Discard warmupDrop the first W runs so cold-start noise is excluded.
- SummariseCompute mean, standard deviation, and coefficient of variation for duration and memory.
- Test vs baselineWelch's t-test (two-sample, unequal variance) against the committed baseline.
- DecideSignificant AND effect over threshold → regression. Variance over threshold → unreliable, not a pass. Absolute ceiling breach → hard fail.
Честность обеспечивают три свойства. Во-первых, регрессии нужны две вещи одновременно: статистическая значимость (разница вряд ли является шумом) и размер эффекта выше порога (разница достаточно велика, чтобы о ней беспокоиться). Крошечное реальное замедление не вызывает ложной тревоги. Крупное замедление в шумных данных не остаётся без внимания. Во-вторых, нестабильность — это вердикт: когда разброс между прогонами превышает границу, шлюз сообщает, что среда ненадёжна. Он не усредняет шум до бессмысленного среднего значения и не называет это прохождением. В-третьих, по-прежнему существует абсолютный потолок — жёсткая верхняя граница, которая проваливает сборку независимо от статистики. Благодаря ему “значимой регрессии нет” никогда не может оправдать уже слишком медленный результат.
Это та дисциплина измерений, которую ISO/IEC 17025 описывает для любой метрики, заслуживающей доверия: результаты, полученные в заранее заданных условиях, — повторяемость в пределах одной среды (ISO/IEC 17025, §3.7) и воспроизводимость между средами (ISO/IEC 17025, §3.5). Показатель производительности NextPDF имеет смысл только как “этот метод, эта базовая линия, этот прогон”. Именно поэтому он живёт вместе со сборкой, которая его породила, а не в предложении на этой странице.
Практический пример
Заголовок раздела «Практический пример»На практике “честно” выглядит как описание метода, а не как число:
<?php
declare(strict_types=1);
// The gate is invoked with its conditions made explicit, e.g.://// php ci/scripts/benchmark-gate.php \// --runs=5 --warmup=1 --testsuite=Unit \// --baseline=<committed-baseline>//// It then reports, for duration AND memory:// - mean, standard deviation, coefficient of variation (the spread)// - Welch's t-test p-value and effect size vs the baseline// - a verdict: PASS | REGRESSION | UNSTABLE | hard-ceiling FAIL//// An honest performance statement is therefore shaped like:// "<suite>, <runs> runs (<warmup> warmup), <hardware/runtime>,// no statistically significant regression vs baseline <id>;// coefficient of variation within bound."//// It is NEVER shaped like:// "NextPDF is fast" — or a bare millisecond number with no method.Результат теста производительности — это воспроизводимый метод и вердикт. Само значение в миллисекундах принадлежит сборке, которая его породила и где вы можете получить его заново, а не документации, куда его переписали и где вы этого сделать не можете.
Распространённое заблуждение
Заголовок раздела «Распространённое заблуждение»Первое заблуждение в том, что тест производительности — это число. Тест производительности — это процедура, которая даёт распределение. Число — лишь одна выборка из этого распределения. Сообщить лучший из нескольких прогонов или один прогретый прогон — это не оптимизм. Это измерение совсем другого результата (пика в идеальных условиях), выданного за типичную производительность.
Второе в том, что “нет статистически значимой регрессии” означает “гарантированно так же быстро, как раньше”. На самом деле это означает, что наблюдаемая разница находится в пределах того, что метод способен отличить от шума при данном числе прогонов и данном разбросе. Это ограниченное, условное утверждение. Именно поэтому NextPDF сохраняет абсолютный потолок как независимую защиту и отказывается сводить результат к безусловному заявлению — ни в свою пользу, ни против кого-либо ещё.
Ограничения и границы
Заголовок раздела «Ограничения и границы»Эта страница описывает, как NextPDF измеряет производительность и сообщает о ней. Она намеренно не приводит ни показателей пропускной способности, ни задержки, ни памяти. Это живые сигналы, генерируемые из артефактов непрерывной интеграции в заявленных условиях, а текущие значения публикуются вместе со сборкой. Число, повторённое здесь, было бы лишено условий и устарело бы — именно против такого сбоя выступает эта страница. Нет стабильной константы производительности, которую можно было бы привести, поэтому ничего не приводится. Результат — сама дисциплина.
Число прогонов, правила прогрева, пороги и базовая линия принадлежат конфигурации тестирования производительности движка и развиваются вместе с движком и его оборудованием. Если эта конфигурация когда-либо разойдётся с этим объяснением, авторитетным источником будет она. NextPDF не сравнивает производительность ни с какой другой библиотекой — ни в свою пользу, ни во вред кому-либо, — поскольку такое сравнение без идентичных, заявленных условий было бы именно тем безусловным заявлением, отказу от которого посвящена эта страница.
Связанная документация
Заголовок раздела «Связанная документация»- Тестирование по эталонным файлам — та же дисциплина воспроизводимости, применённая к корректности вывода, включая побитовый, структурный и семантический профили.
- Пирамида тестирования NextPDF — где находится уровень производительности и почему он подключается по выбору, а не на каждом изменении.
- Мутационное тестирование: разбор — ещё один пример того, как NextPDF сообщает проверяемый сигнал, а не показное число.
Глоссарий
Заголовок раздела «Глоссарий»- Тест производительности — определённая процедура, которая даёт распределение измерений в заявленных условиях, а не одно число.
- Прогон прогрева — начальная итерация, которая отбрасывается, чтобы эффекты холодного старта (JIT, кэши, автозагрузка) не искажали измеряемый результат.
- Коэффициент вариации — стандартное отклонение, делённое на среднее; безразмерная мера разброса, используемая для оценки того, достаточно ли стабилен прогон, чтобы ему доверять.
- t-критерий Уэлча — двухвыборочный статистический тест для неравных дисперсий; здесь он используется, чтобы решить, отличается ли результат от базовой линии сильнее, чем можно объяснить шумом.
- Размер эффекта — насколько велика разница, независимо от статистической значимости; NextPDF требует и того, и другого, прежде чем объявить регрессию.
- Повторяемость / воспроизводимость — согласованность результатов в заранее заданных условиях в пределах одной среды (повторяемость) или между средами (воспроизводимость), согласно ISO/IEC 17025.
- Абсолютный потолок — жёсткая верхняя граница, которая проваливает сборку независимо от статистического сравнения.