Материал проходит вычитку — возможны неточности.
Урок 24 из 118

Бенчмарк: как запускать

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

Главная мысль

бенчмарк — функция BenchmarkXxx в _test.go с циклом по b.N; число итераций подбирает фреймворк, а запускается всё через go test -bench.

Форма бенчмарка

func BenchmarkValidateEmails(b *testing.B) {
    for i := 0; i < b.N; i++ {
        _ = validateEmails(emails)
    }
}

Бенчмарк — функция в _test.go-файле, имя начинается с Benchmark. Цикл for i:= 0; i < b.N; i++ — обязательный каркас. Тебе не нужно самому решать, сколько раз гонять функцию: фреймворк подбирает b.N, увеличивая его, пока замер не стабилизируется.

Запуск

go test -bench=. -benchmem

-bench — регулярка по именам бенчмарков, . — все. -benchmem включает счёт аллокаций, без него будет только время. Бенчмарки живут в обычных тестовых файлах — и обычные тесты при -bench не запускаются, если не просить.

Когда бенчмарк уместен

Бенчмарк — микроизмерение: одна функция, изолированно. Он отвечает «насколько быстр этот кусок и стал ли быстрее после правки», а не «где тормозит сервис» — для этого профилировщик. До оптимизации меряют бенчмарком, чтобы иметь цифру «до».

В следующем уроке

Вы узнаете:

  • как фреймворк подбирает число итераций b.N
  • как запустить конкретный бенчмарк
Задание · вопросы

Проверьте себя

Вопрос 1 из 3

Что такое бенчмарк в Go?

Вопрос 2 из 3

Как запустить бенчмарк со счётом аллокаций?

Вопрос 3 из 3

b.N — это константа?

Итоги

Бенчмарк: Benchmark-функция, цикл по b.N, go test -bench -benchmem. Микроизмерение изолированной функции — база для сравнений «до/после».

Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки