Честное измерение производительности
Spec: ISO/IEC 25010 ISO/IEC 25010 Spec: ISO/IEC 17025 ISO/IEC 17025 Evidence: Benchmark-backed
Результат измерения без описания метода почти ничего не говорит. Фраза “NextPDF отрисовывает документ за N миллисекунд” ничего не значит, пока неизвестны документ, оборудование, число прогонов и разброс. На этой странице объясняется, как NextPDF измеряет производительность, почему сообщает о ней как о проверяемом сигнале, а не как о громком числе, и почему не публикует голый показатель скорости.
Почему это важно
Заголовок раздела «Почему это важно»Заявления о производительности легко опубликовать и легко исказить, чаще всего случайно. Один прогретый прогон на простаивающем ноутбуке, самый быстрый результат из десяти попыток или микротест функции, которую никто не вызывает на горячем пути, — всё это может дать реальное число, которое ничего не предсказывает о вашей нагрузке. Spec: ISO/IEC 25010 ISO/IEC 25010 определяет эффективность производительности как выполнение функций в пределах параметров времени и пропускной способности в заданных условиях (ISO/IEC 25010, §3.10). Уберите “в заданных условиях” — и число перестаёт быть измерением. Оно становится числом без смысла.
Есть и более незаметный сбой: число, которое когда-то было верным. Как только вы вставляете результат измерения в текст, он застывает. Тем временем код, среда выполнения и оборудование продолжают меняться. Устаревшее заявление “быстро” не просто бесполезно. Оно ошибочно, причём незаметно.
Если коротко
Заголовок раздела «Если коротко»- Показатель производительности не имеет смысла без описания метода: входных данных, среды, числа прогонов, правил прогрева и разброса.
- NextPDF измеряет с помощью повторных прогонов, отбрасывает итерации прогрева и сообщает распределение, а не одно лучшее значение.
- Обнаружение регрессий — статистическое: результат сравнивается с базовой линией с помощью t-критерия Уэлча, поэтому изменение должно быть одновременно статистически значимым и достаточно большим, чтобы иметь значение, прежде чем его засчитают как регрессию.
- Нестабильная среда обнаруживается и фиксируется, а не незаметно усредняется: высокий разброс между прогонами делает результат недействительным, а не скрывается в среднем значении.
- Производительность публикуется как живой сигнал, генерируемый вместе со сборкой, а не как застывшее громкое число — именно поэтому на этой странице нет ни одного значения в миллисекундах.
Как к этому подходит NextPDF
Заголовок раздела «Как к этому подходит NextPDF»Шлюз производительности движка — это статистический тест, а не один прогон с замером времени. Задокументированная методика многократно запускает измеряемый набор, отбрасывает заданное число прогонов прогрева и вычисляет среднее, стандартное отклонение и коэффициент вариации как для длительности, так и для памяти. Затем она сравнивает текущий результат с зафиксированной базовой линией:
- Repeat Run the measured suite N times under fixed conditions.
- Discard warmup Drop the first W runs so cold-start noise is excluded.
- Summarise Compute mean, standard deviation, and coefficient of variation for duration and memory.
- Test vs baseline Welch's t-test (two-sample, unequal variance) against the committed baseline.
- Decide Significant 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 имеет смысл только как “этот метод, эта базовая линия, этот прогон”. Именно поэтому он живёт вместе со сборкой, которая его породила, а не в предложении на этой странице.
Что говорят данные
Заголовок раздела «Что говорят данные»Evidence: Benchmark-backed Шлюз измерения производительности движка выполняет повторные измерения с отбрасыванием прогрева, рассчитывает среднее, стандартное отклонение и коэффициент вариации, а также применяет двухвыборочный t-критерий Уэлча для сравнения с зафиксированной базовой линией. Явные исходы: “пройдено”, “регрессия”, “нестабильно” и “жёсткий потолок”. Тесты производительности также существуют в виде выделенного, отдельно запускаемого набора и стенда PHPBench. Производительность измеряется осознанно, а не оценивается на глаз.
Evidence: Standard-backed “В заданных условиях” — это не редакторская осторожность. Это определение. Spec: ISO/IEC 25010, §3.10 ISO/IEC 25010 §3.10 связывает эффективность производительности с заданными условиями времени, пропускной способности и ресурсов. Число без своих условий — это не более слабое измерение. Это вообще не измерение.
Evidence: Standard-backed Формулировка о повторяемости и воспроизводимости следует Spec: ISO/IEC 17025 ISO/IEC 17025 : результат заслуживает доверия только относительно заранее заданных условий, отличая повторяемость в одной среде от воспроизводимости между средами. Тест производительности, который не может указать свои условия, не может претендовать ни на то, ни на другое.
Практический пример
Заголовок раздела «Практический пример»На практике “честно” выглядит как описание метода, а не как число:
<?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.
- Абсолютный потолок — жёсткая верхняя граница, которая проваливает сборку независимо от статистического сравнения.