Preconnect vs dns-prefetch
https://www.w3.org/TR/resource-hints/
Если я правильно понимаю, оба они используются, чтобы инициировать раннее подключение к загрузке ресурсов быстрее в более позднее время.
preconnect просто делает "больше".
Помимо лучшей поддержки браузера, есть ли причина использовать dns-prefetch over preconnect? Я также видел веб-сайты, использующие оба rel в том же теге ссылки, чтобы использовать preconnect, если это возможно, и возвращаться к dns-prefetch, если нет.
<head>
<link
rel="dns-prefetch preconnect"
href="#" onclick="location.href='https://fonts.gstatic.com'; return false;"
crossorigin
>
</head>
Ответы
Ответ 1
В последнее время я немного исследовал эту тему, и пока мои (теоретические) выводы заключаются в следующем:
Разница в поддержке браузеров незначительна по состоянию на середину 2018 года при подсчете реального глобального использования браузеров (~ 73% против ~ 74%)
dns-prefetch
= DNS и preconnect
= DNS + TCP + TLS. Обратите внимание, что поиск DNS довольно дешевый (простой запрос-ответ к DNS-серверу, который кэшируется в браузере в течение короткого промежутка времени), тогда как TCP и TLS требуют некоторых ресурсов сервера.
Следовательно, практическое различие заключается в том, что если вы знаете, что выборка сервера произойдет наверняка, preconnect
хорошо. Если это произойдет только иногда, и вы ожидаете большой трафик, preconnect
может вызвать много бесполезной работы TCP и TLS, и лучше подойдет dns-prefetch
.
Например:
- если страница запрашивает
https://backend.example.com/giveMeFreshData
при каждой загрузке, а ответ не кэшируется, preconnect
подключение хорошо подходит - если страница запрашивает только статический ресурс, такой как
https://statics-server.example.com/some-image.jpg
или https://statics-server.example.com/some-css.css
, и ресурс очень скорее всего, из кеша браузера пользователя (один и тот же ресурс используется на многих страницах, и ваш пользователь будет запускать много загрузок страниц, как это, с теплым кешем - и никакие другие ресурсы не извлекаются из этого источника) затем preconnect
может создать множество ненужных TCP-соединений на вашем сервере (которые будут прерваны через несколько секунд, но все же они не были необходимы в первую очередь) и TLS-рукопожатия (однако в этом случае preload
может быть опцией если вы знаете точный URL и ресурс очень важен). - Тем не менее, если трафик на вашем сайте небольшой, это различие не должно сильно влиять на него, поэтому
preconnect
, вероятно, хорошо подойдет для сайтов с низким трафиком, независимо от того, что было упомянуто ранее.
Как всегда, подумайте о вариантах использования, развертывании, измерении и настройке.
Ответ 2
1 предварительное соединение
Последний совет о ресурсах, о котором мы хотим поговорить, - это предварительное соединение. Предварительное подключение позволяет браузеру установить ранние подключения до того, как HTTP-запрос будет фактически отправлен на сервер. Это включает DNS-запросы, TLS-согласования, TCP-подтверждения. Это, в свою очередь, устраняет задержку в обоих направлениях и экономит время пользователей.
2 Предварительная выборка
Предварительная выборка - это подсказка ресурсов с низким приоритетом, которая позволяет браузеру извлекать ресурсы в фоновом режиме (простой), которые могут понадобиться позже, и сохранять их в кэше браузера. После завершения загрузки страницы начинается загрузка дополнительных ресурсов, и если пользователь нажимает предварительно выбранную ссылку, он мгновенно загружает содержимое.
2.1 Предварительная загрузка ссылок
Предварительная выборка ссылок позволяет браузеру извлекать ресурсы, сохранять их в кеше, предполагая, что пользователь их запросит. Браузер ищет предварительную выборку в HTML или заголовке HTTP Link.
2.2 Предварительная выборка DNS
Предварительная выборка DNS позволяет браузеру выполнять поиск DNS на странице в фоновом режиме, пока пользователь просматривает. Это минимизирует задержку, так как поиск DNS уже произошел, когда пользователь нажимает на ссылку. Предварительную выборку DNS можно добавить к определенному URL, добавив тег rel= "dns-prefetch" к атрибуту ссылки. Мы рекомендуем использовать это для таких вещей, как шрифты Google, Google Analytics и ваш CDN.
2.3 Предварительный рендеринг
Предварительная визуализация очень похожа на предварительную выборку в том, что она собирает ресурсы, к которым пользователь может перейти дальше. Разница в том, что предварительный рендеринг фактически отображает всю страницу в фоновом режиме, все ресурсы документа.
Более подробная информация: https://www.keycdn.com/blog/resource-hints/
Заключение
Основная разница между dns-prefetch и preconnect
Разница между dns-prefetch и preconnect заключается в том, что dns-prefetch будет выполнять только поиск DNS, тогда как preconnect будет выполнять поиск DNS, согласование TLS и квитирование TCP. Это означает, что он избегает дополнительных 2 RTT, когда ресурс готов к загрузке.
Важным аспектом является то, что поддержка dns-prefetch намного больше, чем поддержка preconnect.
Вы можете найти несколько конкретных примеров здесь: https://responsivedesign.is/articles/prefetch-preconnect-dns-priority/