Skip to content

v0.1.1

Choose a tag to compare

@Stivo182 Stivo182 released this 03 Sep 22:36
· 6 commits to main since this release

Что изменено

Оптимизированы создание, разбор, поиск и форматирование ошибок. Сокращены повторные вычисления и выделения
памяти, внутренние компоненты переиспользуются между вызовами. Публичный 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