Сжатие трафика это огромный прирост к скорости загрузки страницы
Скорость сайта зависит не только от чистого кода. Есть ещё один уровень - то, как данные физически летят по сети. Можно написать идеальное приложение, но если оно отдаёт пользователю жирные файлы, сайт будет тупить.
У меня в проекте получилась двухуровневая система сжатия. Своего рода два вышибалы на входе. Один на уровне веб-сервера, второй на уровне самого приложения на Rust.
Первый уровень - Caddy. Я просто написал в конфиге encode zstd gzip. И всё. Zstd - это современный алгоритм от Фейсбука. Сжимает почти так же круто, как Brotli, но работает в разы быстрее. А gzip это старый добрый запасной вариант для всякого старыя.
Как это работает? Браузер присылает заголовок, мол, я умею распаковывать вот это и вот это. Caddy видит, выбирает самый эффективный алгоритм и заворачивает страницу. Браузер получает архив, мгновенно распаковывает на лету и показывает.
Второй уровень - мой сервер на Axum. Там подключен специальный слой для сжатия с алгоритмом Brotli. Это лучший алгоритм для текста. Если Caddy вдруг пропустит запрос напрямую к Rust (например, отдаст статику), Axum сам подхватит и выжмет максимум.
В итоге страница весом в 50 килобайт по сети летит как 8-10. Вроде мелочь, а разница колоссальная. Особенно на слабом мобильном интернете.
Но есть важный нюанс. Мы не сжимаем картинки. У меня они уже конвертируются в формат AVIF. Это и так сжатый формат. Если начать сжимать AVIF через gzip, он меньше не станет, только процессор сервера зря напряжотся. Caddy умный, он по заголовкам видит, что это картинка, и отдаёт как есть, не тратя ресурсы.
Впринцепе, получился идеальный баланс. Текст сжимается в несколько раз, картинки уже лёгкие, а сервер не жрёт лишние ресурсы. Всё летает, как и задумано.