Сжатие трафика это огромный прирост к скорости загрузки страницы

Скорость сайта зависит не только от чистого кода. Есть ещё один уровень - то, как данные физически летят по сети. Можно написать идеальное приложение, но если оно отдаёт пользователю жирные файлы, сайт будет тупить.

У меня в проекте получилась двухуровневая система сжатия. Своего рода два вышибалы на входе. Один на уровне веб-сервера, второй на уровне самого приложения на Rust.

Первый уровень - Caddy. Я просто написал в конфиге encode zstd gzip. И всё. Zstd - это современный алгоритм от Фейсбука. Сжимает почти так же круто, как Brotli, но работает в разы быстрее. А gzip это старый добрый запасной вариант для всякого старыя.

Как это работает? Браузер присылает заголовок, мол, я умею распаковывать вот это и вот это. Caddy видит, выбирает самый эффективный алгоритм и заворачивает страницу. Браузер получает архив, мгновенно распаковывает на лету и показывает.

Второй уровень - мой сервер на Axum. Там подключен специальный слой для сжатия с алгоритмом Brotli. Это лучший алгоритм для текста. Если Caddy вдруг пропустит запрос напрямую к Rust (например, отдаст статику), Axum сам подхватит и выжмет максимум.

В итоге страница весом в 50 килобайт по сети летит как 8-10. Вроде мелочь, а разница колоссальная. Особенно на слабом мобильном интернете.

Но есть важный нюанс. Мы не сжимаем картинки. У меня они уже конвертируются в формат AVIF. Это и так сжатый формат. Если начать сжимать AVIF через gzip, он меньше не станет, только процессор сервера зря напряжотся. Caddy умный, он по заголовкам видит, что это картинка, и отдаёт как есть, не тратя ресурсы.

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