Dlaczego duże witryny przechowują swoje obrazy / css w domenach zewnętrznych?

43

Dlaczego strony takie jak Facebook, Twitter i Google przechowują swoje obrazy i css w domenach zewnętrznych, takich jak:

  • Facebook: static.ak.fbcdn.net
  • Świergot: a0.twimg.com
  • Google: ssl.gstatic.com

Pytania):

  • Czy to wydajność? czy bezpieczeństwo?
Rick Rhodes
źródło

Odpowiedzi:

53

@toomanyairmiles jest częściowo poprawny - celem tej techniki jest umożliwienie równoległych połączeń z przeglądarki internetowej do serwera. Przeglądarki internetowe powinny zezwalać na co najmniej dwa jednoczesne połączenia z jednym hostem, ale wiele nowych przeglądarek może zarządzać maksymalnie 60. Niezależnie od tego, jednoczesne jednoczesne połączenia między przeglądarką a serwerem (serwerami) internetowymi są dużym wąskim gardłem.

Z zasobu Google :

Specyfikacja HTTP 1.1 (sekcja 8.1.4) stwierdza, że ​​przeglądarki powinny zezwalać na maksymalnie dwa jednoczesne połączenia na nazwę hosta (chociaż nowsze przeglądarki zezwalają na więcej: patrz lista przeglądarek). Jeśli dokument HTML zawiera odniesienia do większej liczby zasobów (np. CSS, JavaScript, obrazy itp.) Niż maksymalna dozwolona na jednym hoście, przeglądarka wysyła żądania dotyczące tej liczby zasobów, a pozostałe kolejkuje. Po zakończeniu niektórych żądań przeglądarka wysyła żądania dotyczące kolejnej liczby zasobów w kolejce. Powtarza ten proces, dopóki nie pobierze wszystkich zasobów. Innymi słowy, jeśli strona odwołuje się do więcej niż X zasobów zewnętrznych z jednego hosta, gdzie X to maksymalne dozwolone połączenia na hosta, przeglądarka musi je pobierać sekwencyjnie, X na raz, ponosząc 1 RTT na każde X zasobów. Całkowity czas podróży w obie strony wynosi N / X, gdzie N jest liczbą zasobów do pobrania z hosta. Na przykład, jeśli przeglądarka zezwala na 4 jednoczesne połączenia na nazwę hosta, a strona odwołuje się do 100 zasobów w tej samej domenie, poniesie 1 RTT na każde 4 zasoby i całkowity czas pobierania 25 RTT.

Tak więc sposobem obejścia tego jest „dzielenie” żądań do różnych domen lub hostów:

Ponownie z tego samego zasobu Google:

Równoważ zasoby równoległe między nazwami hostów. Żądania dotyczące większości zasobów statycznych, w tym obrazów, CSS i innych obiektów binarnych, mogą być równoległe. Zrównoważyć żądania do wszystkich tych obiektów w jak największym stopniu w nazwach hostów. Jeśli nie jest to możliwe, z zasady należy upewnić się, że żaden host nie obsługuje więcej niż 50% więcej niż średnia dla wszystkich hostów. Na przykład, jeśli masz 40 zasobów i 4 hosty, każdy host powinien idealnie obsłużyć 10 zasobów; w najgorszym przypadku żaden host nie powinien obsługiwać więcej niż 15. Jeśli masz 100 zasobów i 4 hosty, każdy host powinien obsługiwać 25 zasobów; nikt nie powinien obsługiwać więcej niż 38 osób.

Ale jest jeszcze jeden element układanki. Każde żądanie zwykle ma swoje własne koszty ogólne, zwykle w formie plików cookie. Elementy statyczne, takie jak obrazy, CSS i JavaScript, nie muszą przesyłać danych plików cookie, więc podawanie ich z (sub) domen bez plików cookie może spowodować szybsze przechodzenie w obie strony:

Treściom statycznym, takim jak obrazy, pliki JS i CSS, nie muszą towarzyszyć pliki cookie, ponieważ użytkownik nie wchodzi w interakcje z tymi zasobami. Możesz zmniejszyć opóźnienie żądania, udostępniając zasoby statyczne z domeny, która nie obsługuje plików cookie. Ta technika jest szczególnie przydatna na stronach odwołujących się do dużych ilości rzadko przechowywanych w pamięci podręcznej treści statycznych, takich jak często zmieniające się miniatury obrazów lub rzadko dostępne archiwa obrazów. Zalecamy tę technikę dla każdej strony, która obsługuje więcej niż 5 zasobów statycznych. (W przypadku stron, które obsługują mniej zasobów niż to, nie jest warte kosztu założenia dodatkowej domeny).

Aby zarezerwować domenę bez plików cookie do obsługi zawartości statycznej, zarejestruj nową nazwę domeny i skonfiguruj bazę danych DNS za pomocą rekordu CNAME, który wskazuje nową domenę na istniejący rekord domeny A. Skonfiguruj serwer WWW, aby obsługiwał zasoby statyczne z nowej domeny, i nie zezwalaj na ustawianie plików cookie w tej domenie. Na swoich stronach internetowych odwołaj się do nazwy domeny w adresach URL zasobów statycznych.

Mike Hudson
źródło
13

W przeszłości przeglądarki internetowe mogły pobierać tylko dwa elementy jednocześnie (obecnie 6 lub więcej), więc pobieranie zasobów z różnych domen jest szybsze niż pojedyncza domena. Dotyczy to wszystkiego, od obrazów po skrypty javascript.

Wiele firm korzysta również z CDN , narzędzia, które zapewnia, że ​​użytkownik końcowy pobiera dane z serwera, który jest blisko nich geograficznie, co również zwiększa wydajność witryny, skracając czas obchodzenia żądań zasobów.

toomanyairmiles
źródło
7

Duże witryny przenoszą swoją statyczną zawartość (obrazy, pliki JS i CSS) do sieci dostarczania treści lub CDN, ponieważ wdrożenie zawartości na wielu rozproszonych geograficznie serwerach przyspieszy ładowanie stron z perspektywy użytkownika.

Ponieważ CDN ma inną nazwę domeny, zapewnia także korzyści z dzielenia domen .

mvark
źródło
3

Ograniczenie do 2 pozycji nie stanowi już problemu. Chociaż jest to zalecenie specyfikacji HTTP, wszystkie nowoczesne przeglądarki umożliwiają co najmniej 6 równoczesnych połączeń .

seanhussey
źródło
-1

Jest to nadal potrzebne w przypadku niepożądanych plików cookie wysyłanych do nagłówka, gdy nazwa domeny zewnętrznej nie ma ustawionych żadnych plików cookie, więc ładowanie zawartości jest znacznie szybsze.

Tak, nadal jest potrzebny do celu prędkości.

Tonio
źródło
Akceptowana odpowiedź mówi już, że pliki cookie nie są wysyłane do domeny zewnętrznej. Ta odpowiedź nie mówi nic, czego inne odpowiedzi jeszcze nie obejmują.
Stephen Ostermiller