Стараюсь как для себя, но для тебя

Я не гонюсь за цифрами. Цифры это просто способ проверить, что я не налажал. Настоящая цель в другом.

Скорость нужна не для Google. Она нужна для человека в метро. С 3G, на старом телефоне. Он тыкает на ссылку, а там белый экран. Секунда. Две. Три. Он уходит. Не потому что контент плохой, а потому что ждать не хочет. Медленный сайт это неуважение. Ты заставляешь человека тратить время впустую.

Что дает скорость

Я не просто так выбрал этот стек. Каждое решение это минус секунда загрузки.

SSR вместо SPA. SPA сначала грузит кучу JavaScript, потом рендерит. SSR отдает готовый HTML сразу. Браузер получил, показал. Все. Для блога это идеально. Меньше JS - быстрее первый экран.

Rust и Axum. Почему не Python или Go? Потому что в Rust нет сборщика мусора. Программа не останавливается, чтобы убрать за собой. Работает ровно. И памяти жрет мало. На моем VPS с двумя гигами это критично.

Leptos. Он умеет рендерить на сервере без гидратации. На выходе чистый HTML. Никакого лишнего кода.

HTTP/3. Я уже писал про него. Это UDP вместо TCP. Меньше задержек, когда соединение плохое. Caddy включает его из коробки. Просто открыл порт и все.

Turso. Это база данных. Тот же SQLite, только на Rust. Локальный файл, нет сетевых задержек. Поиск на Tantivy работает мгновенно.

Кэширование. HTML постов кэшируется в памяти. Повторные заходы занимают 0.14 секунды вместо 0.36. Markdown не парсится заново. Каждый раз.

Сжатие. Brotli, Gzip, Zstd. Caddy сжимает на лету. Трафик меньше - загрузка быстрее.

Картинки. AVIF и WebP. Современные форматы. Меньше вес - быстрее загрузка.

Что важно замерять

Я смотрю не на одну цифру, а на несколько.

TTFB. Сколько сервер думает, прежде чем отдать первый байт. У меня миллисекунды, потому что SSR и локальная база.

FCP. Когда пользователь видит первый контент. Чистый HTML - быстро.

LCP. Когда загрузился главный элемент. Обычно заголовок или обложка. Обложки у меня SVG, они легкие.

CLS. Не дергается ли страница. У меня стабильно, потому что нет динамической подгрузки.

Lighthouse. Инструмент Google. 100 из 100 - это возможно, если не тащить лишнего.

Что реально работает

Ноль JS на публичной части. Только settings.js для темы и шрифта, и sw.js для PWA. Все остальное HTML и CSS.

Инлайновый CSS для критического пути. Стили в head, чтобы первый экран рисовался сразу.

Ленивая загрузка картинок. Браузер сам решает, когда грузить.

Кэш статики на год. Браузер не перезапрашивает CSS и JS.

Service Worker для PWA. Офлайн-режим, кэш навигации. Сайт работает даже без сети.

Минимум зависимостей. Каждый крейт это вес. Я выпилил SQLite, оставил Turso.

Чего избегать

Тяжелые JS-фреймворки для блога. React или Vue для статичного контента это оверкилл. SSR плюс минимум JS быстрее.

Слишком много шрифтов. Каждый вес это запрос. Inter Bold хватает.

Изображения без сжатия. JPEG на 5 мегабайт вместо AVIF на 200 килобайт - это разница в секундах загрузки.

Синхронные запросы к базе в цикле. N+1 запросов убивают скорость. Один запрос с IN - быстрее.

Блокирующие скрипты. defer или async, иначе страница ждет загрузки JS.

Отсутствие кэша. Каждый запрос парсит Markdown заново - это лишняя работа.

Что можно улучшить

Синхронный ввод-вывод. get_post_by_slug блокирует runtime. Для 40 постов не критично, но при росте стоит переделать.

Кэш HTML уже есть. Можно добавить кэш для тегов и главной.

Предзагрузка критических ресурсов. preload для шрифта и CSS.

HTTP/3 уже есть. Можно добавить Early Hints (103) для еще более быстрого старта.

Как я пишу об этом

От первого лица. «Я замерил», «Я удивился», «Я не ожидал».

Конкретика вместо абстракций. Не «стало быстрее», а «0.36s -> 0.14s».

Один пост - одна мысль. Не пытаться объять все. «Кэш HTML» - отдельный пост. «HTTP/3» - отдельный.

Скриншоты и цифры. Lighthouse-отчет, график времени ответа.

Честно про грабли. «Первый замер показал 1.2s - я подумал, что кэш сломался. Оказалось, html переместился в insert, и компилятор не дал использовать его в логе».

Ссылки на инструменты. PageSpeed, WebPageTest - чтобы читатель мог проверить сам.

Вот и все. Скорость это не про цифры. Это про уважение к человеку, который зашел на твой сайт.

Любое решение про скорость. Если что то мешает - отказываюсь. Когда прийдет 5G это будет не актуально, а пока инэт штормит, я делаю всё…