- Как выяснили выше, у нас на уровне HTTP .html будет всё время мазать мимо кеша. А во время префетчинга хочется начать загружать страницу, когда пользовать просто наведётся на ссылку, чтобы при клике оставалось только показать страницу, а не скачивать её.
И тут проблема - из-за кешмисов мы в итоге получим 2 запроса. Префетчинг и переход. Это можно прекрасно увидеть на https://v1000.reatom.dev. Там как раз идёт префетчинг, а потом загрузка этой же страницы заново.
Для того, чтобы поправить эту проблему можно использовать
Service Worker. Они позволяют перехватывать все запросы и подменять ответ, если требуется. И кеши на pickyouragent сделаны как раз с помощью них. Каждая страница кешируется в SW на 30 секунд. В итоге браузер делает 2 запроса, но они моментально возвращаются из кеша.А если проект обновится, то нет проблемы - пользователь увидит новую версию просто на 30 секунд позже.
Так же во время исследования я нашёл workbox: https://github.com/GoogleChrome/workbox. Суперрешение для типовых задач внутри SW.
Итоги:
На https://pickyouragent.dev пользователь испытывает задержки около 30-40мс при навигации по сайту, что воспринимается как мгновенно.
В FF - около 60-70мс, что раздражает, но это всё равно куда быстрее, чем 1 запрос до CDN
В Safari - около 100-150мс. Префетчинг пока что сломан.
Вот и одна из причин почему сайты в хромиуме работают в среднем побыстрее чем в его конкурентах.