DEV Community

Arif Balaev
Arif Balaev

Posted on

Что не нужно префетчить/пререндерить?

Вольный перевод статьи What (not) to Prefetch/Prerender

В этом посте описан ряд крайних случаев, с которыми мы столкнулись при разработке библиотек , таких как Quicklink. Мы считаем, что большинство этих крайних случаев в равной степени применимы к случаям, использующим или «prefetching» из скрипта. В итоге:

  • Избегайте предварительной загрузки страниц для аутентификации
  • Избегайте предварительной загрузки во избежании DoS
  • Избегайте предварительной загрузки ссылок на ключевые страницы покупки
  • Избегайте предварительной загрузки больших ресурсов
  • Избегайте предварительной загрузки ссылок других источников
  • Избегайте предварительной загрузки рекламы

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

Избегайте предварительной загрузки страниц для аутентификации

Конфигурация, учитывающая эти классы страниц, позволит избежать случайных выходов из системы или истечения сеанса. Даже в одном и том же домене пользователи могут запутаться при входе в систему, переходе от a->b и внезапно быть выброшены из-за того, что logout был предварительно загружен.

Решением этой проблемы является обнаружение и игнорирование страниц, участвующих в процессе аутентификации.
В особенности:

  • Определить страницы входа (/ login, login.js, login.php и т.д.)
  • Определить страницы выхода
  • Определить страницы сброса пароля
  • Определить страницы регистрации

Избегайте предварительной загрузки во избежании DoS

Где сервер может ограничить доступ из-за злоупотребления

Избегайте слишком частой предварительной загрузки с одного и того же сервера в течение N-ого периода времени (например, N = 10 минут). В наши дни на серверах часто применяется защита от DOS, чтобы избежать злоупотреблений одним IP-адресом, выполняющим слишком много запросов. Методом проб и ошибок почти регулярного запроса только из одного источника может помочь избежать этих проблем.

Где сервер может не иметь возможности обрабатывать так много запросов

Избегайте создания большого количества запросов к одному и тому же серверу при каждой навигации. Трудно определить, насколько хорошо сайты могут обрабатывать дополнительный трафик, получаемый при предварительной загрузке. Крупные сайты, вероятно, лучше способны благодаря своей инфраструктуре.

Избегайте предварительной загрузки ссылок на ключевые страницы покупки

  • Корзины в e-commerce (например, cart, cart.php и т.д.). Это может исказить их впечатления от сервера о том, как часто пользователи на самом деле пытаются увидеть, что находится в их корзине, а когда нет. Можно утверждать, что это очень крайний случай, но в любом случае.
  • Предварительная загрузка ссылок «добавить в корзину» может привести к добавлению товаров в корзину без согласия пользователя. Эти функции иногда реализуются с помощью тегов или , но также могут быть реализованы с помощью ссылок.

Избегайте предварительной загрузки ссылок на ресурсы, которые, как правило, имеют большой размер

например, mp4, gif, zip, pdf. Загрузка файлов без согласия пользователя недопустима в большинстве случаев. Это может быть особенно вредно на сайтах, которые перечисляют несколько файлов для загрузки (например, видео или музыкальные плейлисты).

Избегайте предварительной загрузки ссылок других источников

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

Избегайте предварительной загрузки рекламы

  • Предварительная загрузка рекламных ссылок может привести к тому, что она будет считаться рекламным кликом на рекламных серверах, что приведет к завышенным показателям, таким как CTR.
  • Реклама обычно показывается внутри фреймов, которые могут игнорироваться автоматическими инструментами предварительной загрузки, но иногда они вставляются в документ верхнего уровня непосредственно автором сайта.

Избегайте предварительной загрузки ссылок по протоколам, отличным от http / https:

например tel:, mailto:, javascript:, market:, intent:. В зависимости от браузера предварительная загрузка этих ссылок может инициировать действия браузера в ответ на них.

Top comments (0)