Производительность: абсолютные и относительные URL - PullRequest
8 голосов
/ 01 марта 2011

Что быстрее? Горячая ссылка (встроенная связь) на абсолютный URI или размещение ресурса самостоятельно и использование относительного URI ?

В его Учебник о том, как стилизовать элементы HTML5 в Internet Explorer , Реми Шарп заявляет, что горячее связывание вызывает «дополнительный запрос HTTP [GET]».Я согласен, если вы сравниваете горячие ссылки с копированием и вставкой (встраиванием) скрипта в HTML.Но если вы сравниваете горячие ссылки с локальным размещением сценария и ссылками по относительному пути, то я бы сказал, что горячие ссылки на самом деле (даже немного) быстрее, потому что браузер не должен разрешать абсолютныеURL из относительного пути.Однако в обоих случаях выполняется дополнительный HTTP-запрос GET, верно?

Ответы [ 5 ]

11 голосов
/ 01 марта 2011

Правильный ответ - это зависит.

Горячая ссылка может быть медленной, потому что -

  1. Требуется дополнительный поиск DNS
  2. Невозможно повторно использовать существующее соединение через сокет TCP / IP

Хостинг на вашем сервере может быть медленным, потому что -

  1. Браузеры разрешают только n одновременных запросов на хост.Наличие еще одного запроса к тому же хосту может привести к очереди, которая может быть медленной.Число 'n' зависит от браузера и может находиться в диапазоне от 2 до 6. См. Browsercope> сеть> соединения для имени хоста .

Если вы предполагаете, что оба сервера идентичны вПри всем уважении, я бы сказал, что хостинг на вашем сервере будет быстрее.Это особенно верно для новых браузеров, где количество подключений к хосту равно 6.

Но, к сожалению, все никогда не было так просто.Я бы рекомендовал использовать хотлинкинг только в том случае, если -

  1. У вас слишком много ресурсов (images / js) в вашем домене
  2. Другой сервер - это CDN, а ресурс является популярнымДостаточно, чтобы иметь приличный шанс, что он будет присутствовать в кеше браузера.Подумайте, JQuery на серверах Google.

В остальных случаях лучше размещать на своих серверах.

2 голосов
/ 01 марта 2011

Время, необходимое клиенту для разрешения относительного URI, абсолютно незначительно.

Таким образом, не имеет значения, используете ли вы ссылку на ресурс в том же домене документа, используя абсолютные или относительные URI.

Единственная разница будет в том, что ресурс размещен на другом сервере.Затем вам понадобится дополнительное TCP-соединение с этим сервером, тогда как дополнительный HTTP-запрос к серверу, к которому у вас уже есть соединение, может использовать это соединение.

2 голосов
/ 01 марта 2011

Это больше связано с вещами более низкого уровня, такими как tcp, а не с http как таковым.Если в настоящее время вы получаете два элемента с одного и того же веб-сервера, ваш браузер, скорее всего, использует их по одному и тому же tcp-соединению.Это две http-транзакции по одному TCP-соединению.Это позволяет избежать накладных расходов на создание другого TCP-соединения.Эти издержки малы с точки зрения трафика, но могут включать большую задержку.

OTOH, выполнение двух http-транзакций, каждая из которых направляется на разные серверы, может быть быстрее, а может и нет.Правда, у вас есть издержки двух TCP-соединений.В этом случае они сериализуются - нужно завершить, прежде чем начать второй.Однако, если вы вытаскиваете много объектов, тогда 2-е, 3-е, 4-е ... соединения могут проходить параллельно, маскируя проблему задержки.В этом сценарии все может идти намного быстрее, так как небольшие объекты могут не подвергаться ограничению пропускной способности вашего интернет-провайдера.

Вода действительно грязная.

Просто следите за задержкой и пропускной способностью.Действительно зависит от количества и размеров ваших ресурсов.

0 голосов
/ 01 марта 2011

Если ресурс не встроен в сам документ HTML (т. Е. Он связан) и ресурс находится на том же сервере с тем же именем хоста, время для извлечения ресурса через абсолютный или относительный URI должно быть практически одинаковым,Дополнительный HTTP-запрос будет отправлен в любом случае.Если вы хотите разделить «практически идентичные», я бы склонялся к тому, чтобы относительный путь был очень, очень, очень маленьким, быстрее, из-за меньшего количества HTML, который необходимо проанализировать, а разбор пути (как вы упомянули) потенциально былбыстрее (из-за того, что строковому токенизатору не приходится иметь дело с доменной частью адреса / адрес короче).Разница здесь реалистична только ради любопытства. Я не могу представить, чтобы сайт был оптимизирован до этого уровня (хотя, может быть, он установил хорошее эмпирическое правило? Относительный путь позволяет свободно изменять домен / путь сайтабез необходимости перезаписывать все URI, содержащиеся в ..)

Одна вещь, которую следует учитывать, будет, если ресурс не размещен на том же сервере, а сервер ссылочного документа HTMLесли включена функция KeepAlive, для подключения ко второму серверу потребуется инициализировать другое TCP-соединение (а также выполнить DNS-запрос для разрешения имени хоста другого сервера, предполагая, что доступ осуществляется не через IP-адрес), что приведет к дополнительным издержкам всравнение с несколькими ссылочными ресурсами на одном и том же сервере (где запросы GET будут выдаваться в рамках существующего TCP-соединения).

То же самое относится к серверу, на котором не включен KeepAlive;TCP-соединение будет инициализировано для каждого запрашиваемого ресурса.

0 голосов
/ 01 марта 2011

Я полагаю, что единственное, что влияет на такую ​​ситуацию, это относительная скорость рассматриваемых серверов (для скорости) и ожидаете ли вы, что этот код будет работать на любом другом сайте (для удобства обслуживания).

...