v0.1.1
Что изменено
Оптимизированы создание, разбор, поиск и форматирование ошибок. Сокращены повторные вычисления и выделения
памяти, внутренние компоненты переиспользуются между вызовами. Публичный API не изменен.
Добавлены бенчмарки основных сценариев работы с библиотекой для прогретого выполнения и первого вызова API
в новом процессе.
Результаты
Методика
Текущее рабочее дерево сравнивалось с версией 5737883 одинаковыми сценариями публичного API.
- прогретый запуск: 5 измерительных и 3 прогревочные итерации, минимум 100 мс на итерацию;
--coldstart: 5 измерительных итераций, каждая в новом процессе;
--coldstart измеряет первый вызов API вместе с ленивой инициализацией классов, но не полное время запуска
приложения. Невоспроизводимые промежуточные результаты в отчет не включались.
Среда: BenchmarkOneScript 0.9.1, OneScript 2.1.0, Windows Server 2022, Intel Core i7-8700.
Прогретое выполнение
| Сценарий | База 5737883 |
Текущий | Изменение времени | Память |
|---|---|---|---|---|
| Создание ленивого разбора, 50 кадров | 19.379 мс | 14.06 мкс | быстрее в 1378 раз | -99.9% |
| Полная материализация, 50 кадров | 18.168 мс | 3.015 мс | быстрее в 6.03 раза | -86.0% |
| Пользовательское представление, 50 кадров | 17.944 мс | 72.437 мкс | быстрее в 247.72 раза | -99.7% |
| Диагностическое представление, 50 кадров | 26.851 мс | 23.162 мс | быстрее в 1.16 раза | -8.2% |
| Диагностическое представление данных, 1000 элементов | 79.243 мс | 6.950 мс | быстрее в 11.40 раза | -90.6% |
СодержитГруппу, 50 ошибок |
780.29 мкс | 9.562 мкс | быстрее в 81.60 раза | -99.2% |
СодержитЛюбойИз, 50 ошибок |
240.41 мкс | 104.31 мкс | быстрее в 2.30 раза | -67.0% |
| Поиск через полный разбор, 50 кадров | 23.959 мс | 3.120 мс | быстрее в 7.68 раза | -86.0% |
| Проверка набора типов | 135.979 мкс | 12.148 мкс | быстрее в 11.19 раза | -86.3% |
| Проверка числового диапазона | 78.402 мкс | 8.063 мкс | быстрее в 9.72 раза | -83.0% |
Создание ошибки с форматом diagnostic |
924.1 мкс | 659.4 мкс | быстрее в 1.40 раза | -10.4% |
| Создание ошибки через фабрику | 76.73 мкс | 71.64 мкс | быстрее на 6.6% | -19.3% |
| Обертывание контекстом | 102.89 мкс | 124.21 мкс | медленнее в 1.21 раза | +1.9% |
Основные сценарии разбора, поиска и форматирования стали быстрее и требуют меньше памяти. При полной
материализации цепочки из 50 кадров время сократилось в 6.03 раза, объем памяти на 86.0%. Создание ошибки
через фабрику осталось близким к исходному времени при сокращении памяти на 19.3%.
Обертывание контекстом воспроизводимо медленнее примерно на 21%, или на 21.3 мкс за операцию. Это единственное
устойчивое ухудшение после прогрева.
Холодный старт
| Сценарий | База 5737883 |
Текущий | Изменение времени | Память |
|---|---|---|---|---|
| Создание ленивого разбора, 50 кадров | 43.907 мс | 294.2 мкс | быстрее в 149.24 раза | -99.8% |
| Полная материализация, 50 кадров | 37.912 мс | 10.367 мс | быстрее в 3.66 раза | -84.8% |
| Пользовательское представление, 50 кадров | 32.678 мс | 212.04 мкс | быстрее в 154.11 раза | -99.6% |
| Диагностическое представление, 50 кадров | 50.902 мс | 44.422 мс | быстрее в 1.15 раза | -8.3% |
| Диагностическое представление, 10 кадров | 11.368 мс | 13.683 мс | медленнее в 1.20 раза | -9.6% |
| Диагностическое представление данных, 1000 элементов | 190.220 мс | 23.610 мс | быстрее в 8.06 раза | -90.2% |
СодержитГруппу, 1 ошибка |
507.3 мкс | 50.78 мкс | быстрее в 9.99 раза | -92.4% |
СодержитЛюбойИз, 1 ошибка |
656.6 мкс | 1.330 мс | медленнее в 2.03 раза | -44.6% |
| Поиск через полный разбор, 50 кадров | 39.663 мс | 10.021 мс | быстрее в 3.96 раза | -84.8% |
| Проверка числового диапазона | 1.447 мс | 46.80 мкс | быстрее в 30.93 раза | -86.0% |
| Создание ошибки через фабрику | 251.46 мкс | 185.8 мкс | быстрее в 1.35 раза | -16.9% |
| Создание построителя | 40.12 мкс | 243.9 мкс | медленнее в 6.08 раза | +128.1% |
Создание ошибки с форматом diagnostic |
10.139 мс | 11.196 мс | сопоставимо | +31.1% |
На первом вызове сохраняется ускорение длинных цепочек, полной материализации, группового поиска и
форматирования больших объемов данных. Ухудшения коротких сценариев связаны преимущественно с первой
инициализацией классов и внутренних сервисов.
Повторный холодный замер создания построителя дал 245.6 ± 24.3 мкс, что совпадает с результатом таблицы.
После полного прогрева создание занимает 8.525 ± 0.144 мкс. После предварительной инициализации
СодержитЛюбойИз занимает 139.3 мкс вместо 1.330 мс.
Контрольный замер диагностического форматирования после полной материализации дал 3.582 мс против
4.44 мс в базовой версии. Само форматирование не деградировало. Разница времени создания ошибки с форматом
diagnostic находится в пределах погрешности, при этом рост памяти на первом вызове сохраняется.
Full Changelog: v0.1.0...v0.1.1