Какие знаешь техники уменьшения воспринимаемого времени загрузки страницы

Ответ

Используй ленивую загрузку (lazy loading) для изображений и компонентов, которые не видны сразу. Оптимизируй критический путь рендеринга (Critical Rendering Path) — минифицируй CSS/JS, размещай стили в <head>, а скрипты перед закрывающим </body>.

Пример lazy loading для изображений:

<img src="placeholder.jpg" data-src="real-image.jpg" loading="lazy" alt="...">

Используй скелетоны или прогресс-бары для контента, загружаемого асинхронно. Кэшируй ресурсы через Service Workers и HTTP-кеширование.

Сжимай изображения (WebP, AVIF) и используй srcset для адаптивности:

<img srcset="image-320w.jpg 320w, image-480w.jpg 480w" sizes="(max-width: 600px) 480px, 800px">

Разделяй код (code splitting) в современных сборщиках (Webpack, Vite) для загрузки только необходимого JS.

Ответ 18+ 🔞

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

Первое дело — не грузи всё сразу, как дурак. Есть же ленивая загрузка, ну, типа, показывай пользователю только то, что он реально видит. Остальное — потом, когда он туда долистает. С картинками это вообще святое. Вместо того чтобы сразу тащить гигабайты котиков, сделай так:

<img src="placeholder.jpg" data-src="real-image.jpg" loading="lazy" alt="...">

Браузер сам сообразит, когда подгружать. А пока пусть стоит заглушка. И, блядь, не забудь сжать эти изображения! Ты чё, в каменном веке живёшь? Конвертируй в WebP или, если хочешь быть вообще красавчиком, в AVIF. И сделай адаптивность, чтобы на телефоне не качалась картинка для 4K-монитора:

<img srcset="image-320w.jpg 320w, image-480w.jpg 480w" sizes="(max-width: 600px) 480px, 800px">

Дальше — критический путь рендеринга. Это, грубо говоря, что нужно, чтобы страница хоть что-то показала. Тут правило простое, как три копейки: CSS — в <head>, чтобы стили применились сразу, а не ждали, пока всё прочитается. А скрипты, которые не критичны, — в самый конец, перед </body>. Чтобы они не блокировали отрисовку. И, ёпта, минифицируй всё! Убери пробелы, комментарии — сделай из кода одну сплошную строку, хоть и нечитаемую, зато быструю.

А теперь про компоненты. Если у тебя там React/Vue/что угодно, не вываливай всю логику приложения одним комом. Используй разделение кода (code splitting). Современные сборщики, типа Webpack или Vite, это умеют. Загружай модули только тогда, когда они реально нужны. Пользователь зашёл в админку? Вот тогда и тащи код админки, а не при первом клике на главную.

И, наконец, кеширование. Это вообще магия, которая экономит трафик и время. Настрой HTTP-кеширование на сервере, чтобы браузер не дергал одни и те же ресурсы каждый раз. А для продвинутых фишек — Service Workers. Они могут кешировать статику и даже отдавать контент, когда сеть тупит.

И последнее — пока что-то грузится, не показывай пользователю пустой экран, от которого тоска берёт. Поставь скелетоны (такие заглушки-контуры) или прогресс-бар. Чтобы он понимал: работа идёт, не уходи.

Вот, собственно, и вся магия. Ничего сверхъестественного, но если не делать и этого — сайт будет тормозить, как Герасим с мешком, и пользователи разбегутся, блядь.