TGViewer
<divelopers> <divelopers> @alexnozer_dev · 1.18K subscribers
Post #267 974
Спекулятивная загрузка

Хорошая навигация — это мгновенная навигация. Но перед отображением страницы нужно выполнить сетевой запрос и получить все ресурсы. Чтобы переход был мгновенным, можно «угадать» следующую страницу и загрузить заранее.

На данный момент в браузерах есть следующие способы реализации предварительной загрузки:

- <link rel="prefetch" href="/catalog"> — браузер загружает HTML страницы в фоновом режиме с низким приоритетом, когда сеть не занята загрузкой ресурсов для текущей страницы. Загруженный HTML кэшируется для дальнейшего использования. Но остальные ресурсы (стили, картинки, скрипты) не загружаются и не кэшируются;

- <link rel="prerender" href="/catalog"> — браузер загружает HTML страницы и все ресурсы, а затем рендерит страницу в невидимой вкладке. Это требует больше ресурсов и нагружает сеть, но страница будет полностью отрисована и готова к немедленному отображению, как-будто пользователь её уже загрузил;

- <script type="speculationrules"> — новый API с настраиваемыми правилами предварительной загрузки. Позволяет настроить список страниц для загрузки в фоне, загрузку при наведении или касании определённых ссылок, приоритеты и условия предварительной загрузки. Пока только в Chromium-браузерах;

- Service Worker — скрипт, который выполняется в отдельном потоке и перехватывает запросы. При установке Service Worker можно определить набор страниц, загрузить их в параллельном потоке и сохранять в Cache Storage. Затем перехватывать запросы и отдавать из кэша уже сохранённые страницы.

Помимо стандартных возможностей браузеров, есть JS-библиотеки. Google экспериментировал с guess.js и quicklink. У популярных мета-фреймворков и библиотек роутинга часто есть встроенные решения.

Предварительная загрузка — рабочий способ улучшения производительности и UX, но опасный. Попытка угадать следующую страницу не всегда оправдывается, что приводит к лишним запросам, затратам трафика и нагрузке на сервер.

Такую оптимизацию нужно внедрять аккуратно и точечно, с замерами и аналитикой. При этом другие оптимизации не отменяются. Уменьшение размера страницы и её ресурсов никогда не будет лишним и дополнит предварительную загрузку.

#performance #web_api
web.dev Prefetching, prerendering, and service worker precaching | web.dev While much of performance deals with what you can do to optimize and eliminate unnecessary resources, it may seem a bit paradoxical to suggest that some resources should be loaded before they're needed. However, there are some cases in which it might be appropriate…
  • 👍 13
  • ❤ 3
More from @alexnozer_dev
  1. Sep 23, 2026Images Preview На некоторых сайтах, где надо показывать изображения в высоком качестве, дл…
  2. Sep 21, 2026Реализация пользовательских атрибутов Под конец прошлого года я рассказывал об API пользов…
  3. Sep 14, 2026Подклассы Event вместо CustomEvent Многие библиотеки предоставляют систему событий в качес…
  4. Sep 11, 2026Эволюция стилей в темах Shopify Адам Ватан на днях поделился новостью, что Shopify выкупил…
  5. Sep 9, 2026Persistent Widgets Многие сайты не должны быть SPA. Но иногда эта архитектура продиктована…
  6. Sep 7, 2026Processing Instructions и маркеры В DOM всё представлено в виде узлов (Node) разных типов.…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →