Что происходит между нажатием Enter в браузере и полной отрисовкой сайта с акцентом на кэш и сеть
Что проверяют
Держите ли вы в голове полную цепочку загрузки и понимаете ли, где именно в ней прячется кэш. Для тестировщика это не теория: изрядная доля невоспроизводимых дефектов это старая копия ресурса из какого-то слоя.
Как отвечать
Идите по шагам и на каждом называйте кэш, который может ответить раньше сети:
- браузер разбирает адрес, проверяет список принудительного HTTPS и при необходимости сам меняет схему;
- если зарегистрирован service worker, запрос сначала уходит к нему, и он может ответить из своего хранилища вообще без сети;
- HTTP-кэш браузера: свежий ресурс отдаётся без запроса, просроченный проверяется условным запросом с
If-None-MatchилиIf-Modified-Since, на который сервер отвечает кодом304без тела; - разрешение имени: свои кэши есть у браузера, у системы и у резолвера провайдера;
- соединение: рукопожатие TCP, затем TLS, у повторных подключений возможно возобновление сессии;
- ответ может прийти не от приложения, а от CDN или обратного прокси, у которых свой срок жизни копии;
- разбор HTML в DOM, стилей в CSSOM, дерево рендера, раскладка, отрисовка. Синхронный скрипт останавливает разбор, стили блокируют отрисовку.
Дальше переводите это в проверки: холодный и тёплый кэш, повторный заход после релиза, заголовки кэширования отдельно на HTML и на статику с хэшем в имени файла, поведение после сброса кэша на CDN.
Где спотыкаются
Всегда тестируют с открытыми инструментами разработчика и включённым отключением кэша. В таком режиме кэш-дефекты не воспроизводятся никогда, а пользователь после релиза получает старый скрипт и белый экран.
Второе: не различают слои и заводят дефект не туда. Старая цена на странице может быть кэшем браузера, кэшем CDN, ответом приложения из своего кэша или репликой базы. Без проверки заголовков и запроса в обход CDN разработчик вернёт задачу обратно.
Третье: считают страницу отрисованной по событию загрузки. Пользователь оценивает другое: когда появился первый контент и когда страница перестала прыгать и начала отвечать на нажатия. Проверять стоит именно это.