2010-02-09 4 views
3

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

Вопрос: Можем ли мы а) использовать поддомены для этой цели и б) будет ли одновременная загрузка также иметь значение по https?

Например, мы хотели бы, чтобы запросить два файла как такового:

https://www.example.com/firstfile.js 
https://subdomain.example.com/secondfile.js 

выполнимо? Альтернативы?

+0

Просто из любопытства, как насчет слияния файлов перед их обслуживанием, так что вы только обслуживаете одну транзакцию в любом случае? – Romain

+1

@Romain, это то, что мы в конечном счете хотели бы сравнить ... что лучше ?: 1 большой .js-файл или 2 одновременных меньших .js-файла. –

ответ

0

a) Да. Используйте document.domain, чтобы избежать вопросов, связанных с одинаковой политикой происхождения.

b) Я не знаю, но я не могу придумать никаких причин, почему это не должно.

+0

Спасибо, Пекка. Не могли бы вы уточнить, что решает document.domain или просто запрашивать файл с двух разных URL-адресов? –

+0

Ничего конкретного, 'document.domain' просто гарантирует, что сценарий из домена 1 не получит проблем с безопасностью при доступе к контенту на домен 2 (известный как политика одинакового происхождения). –

1

Проблема, вызванная сценариями, заключается в том, что они блокируют параллельные загрузки. Спецификация HTTP/1.1 предполагает, что браузеры загружают не более двух компонентов параллельно по имени узла. Если вы обслуживаете свои изображения из нескольких имен хостов, вы можете получить более двух загрузок, которые будут происходить параллельно. Однако при загрузке скрипта браузер не запускает никаких других загрузок даже на разных именах хостов. (source)

Звучит проблематично.

+0

@camomileCase: это точная причина, по которой мы это делаем. Обратите внимание на часть «для имени хоста». Идея состоит в том, что, запрашивая ее из нескольких доменов, мы устраняем эту проблему для этих больших (r) .js-файлов. –

+0

@DA это должно быть возможно, но я сомневаюсь, что это даст вам какое-либо увеличение производительности: * выполнение скриптов * будет выполняться один за другим, а * загрузка * происходит только один раз, затем данные кэшируются. –

+1

Последнее предложение является самым важным: «Хотя загрузка скрипта, однако, браузер не запускает никаких других загрузок даже на разных именах хостов». – camomileCase

3

Насколько мне известно, это не сработает. Сценарии настроены для блокировки параллельных загрузок. Причина этого в том, что параллельная загрузка скриптов может привести к условиям гонки в вашем javascript. Минимизация или загрузка по требованию - ваши лучшие варианты.

+0

Пожалуйста, исправьте меня, если я ошибаюсь, но я думал, что проблема параллельной загрузки ограничивается одним доменом. (FYI, мы также минимизируем) –

+0

Существует разница между параллельной загрузкой * и параллельным * исполнением *, не так ли? Я не понимаю, почему первый не сработает; последнее, безусловно, невозможно по причинам, изложенным Мэттом. –

+0

Я не беспокоюсь о параллельном исполнении. Все исполнения будут завернуты в файл $ (document) jQuery .ready. Мы просто пытаемся извлечь выгоду из производительности, которую мы можем найти с точки зрения запросов сервера и скорости загрузки. –

0

Альтернатива, представленная в книге «Более быстрые веб-сайты» или «даже более быстрые веб-сайты» (которую я рекомендую вам прочитать) предлагает схематично загружать файлы javascript с помощью функции/метода javascript, которая добавит дочерние узлы к элемент.

Возможно, вы захотите провести некоторое исследование по этой теме, но это хорошая практика, которую вы, возможно, захотите рассмотреть.

С уважением,

3

Я думаю, вы должны рассмотреть вопрос о латентности сети (своего рода потерянное время, которое добавляет для каждого вызова, чтобы сделать путешествие туда и обратно). Задержка - это то, что убивает реакцию HTTP-вызовов.

Лично я следую тренду, чтобы уменьшить количество вызовов http.
Я объединять все мои файлы в одном (+ minim + gzip)

+0

Я согласен с частью minim + gzip. Кроме того, я бы обеспечил, чтобы сервер заполнил все соответствующие заголовки, чтобы улучшить управление кешем (Content-Expires и так далее), поэтому дружественные браузеры будут только ударять по серверу один раз. – Romain

Смежные вопросы