Microsoft CDN dla jQuery czy Google CDN? [Zamknięte]


187

Czy faktycznie ma znaczenie, którego CDN używasz do łączenia się z plikiem jquery lub jakimkolwiek plikiem javascript w tej sprawie. Czy jeden jest potencjalnie szybszy od drugiego? Jakie inne czynniki mogą odgrywać rolę, w której CDN zdecydujesz się użyć? Wiem, że Microsoft, Yahoo i Google mają teraz CDN.

Odpowiedzi:


151

Aktualizacja na podstawie komentarzy:

Krótka wersja: To nie ma większego znaczenia, ale może zależeć od tego, co hostują. Wszystkie hostują różne rzeczy: Google nie hostuje jQuery. Ważne, Microsoft nie hostował jQuery-UI, ponieważ od 2016 roku tak! Microsoft oferuje swoje skrypty, które w innym przypadku byłyby obsługiwane ScriptResource.axdi łatwiejszą integrację (np. ScriptManager z ASP. Netto 4.0 ).

Ważna uwaga: jeśli budujesz aplikację intranetową, trzymaj się z dala od podejścia CDN. Nie ma znaczenia, kto go hostuje, chyba że masz bardzo przeciążony serwer wewnętrzny, żadna sieć CDN nie zapewni Ci większej wydajności niż lokalna sieć Ethernet 100 Mb / 1 GB. Jeśli używasz sieci CDN do ściśle wewnętrznych aplikacji, obniżasz wydajność . Ustaw poprawnie nagłówki wygasania pamięci podręcznej i zignoruj ​​CDN istniejące w scenariuszu tylko intranetowym.

Szanse na blokadę wydają się być równe, prawie zerowe. Pracowałem nad umowami, w których nie jest to prawdą, ale wydaje się, że jest to wyjątek. Ponadto od czasu opublikowania tej odpowiedzi kontekst, który ją otaczał, zmienił się znacznie, Microsoft CDN poczynił znaczne postępy.

Projekt, nad którym aktualnie pracuję, wykorzystuje obie sieci CDN, które najlepiej działają w naszym rozwiązaniu. Wpływa na to kilka czynników. Użytkownicy ze starszą przeglądarką nadal prawdopodobnie wysyłają 2 równoczesne żądania na domenę zgodnie z zaleceniami specyfikacji HTTP . Nie jest to problem dla każdego, kto uruchamia coś całkiem przyzwoitego, który obsługuje potokowanie (każda bieżąca przeglądarka), ale w oparciu o inny czynnik znosimy również to ograniczenie, przynajmniej w zakresie javascript.

CDN Google, którego używamy do:

CDN Microsoftu, którego używamy do:

Nasz serwer:

  • Combined.js? V = 2.2.0.6190 (Major.Minor.Iteration.Changeset)

Ponieważ częścią naszego procesu kompilacji jest łączenie i minimalizowanie wszystkich niestandardowych skryptów javascript, robimy to za pomocą niestandardowego menedżera skryptów, który zawiera wersje wydania lub debugowania (niezminimalizowane) tych skryptów w zależności od kompilacji. Ponieważ Google nie obsługuje pakietu sprawdzania poprawności jQuery, może to być wadą. MVC dołącza / wykorzystuje to w swojej wersji 2.0, więc możesz całkowicie polegać na CDN Microsoftu dla wszystkich twoich potrzeb, a wszystko to automatycznie przez ScriptManager .

Jedynym innym argumentem, który należy podać, są czasy DNS, wiąże się to z kosztem szybkości ładowania strony. Średnio: po prostu dlatego, że jest używane więcej (było już dłużej), ajax.googleapis.comprawdopodobnie zwróci go DNS wcześniej ajax.microsoft.com, po prostu dlatego, że lokalny serwer DNS był bardziej skłonny otrzymać żądanie (jest to pierwszy użytkownik w obszarze kary) . Jest to bardzo drobna rzecz i należy ją brać pod uwagę tylko wtedy, gdy wydajność jest niezwykle ważna, aż do milisekundy.
(Tak: zdaję sobie sprawę, że ten punkt jest sprzeczny z tym, że używam obu CDN, ale w naszym przypadku czas DNS jest znacznie przyćmiony przez czas oczekiwania na skrypt javascript / blokowanie)

Na koniec, jeśli nie spojrzałeś na to, jednym z najlepszych dostępnych narzędzi jest Firebug i niektóre wtyczki: Page Speed i YSlow . Jeśli korzystasz z CDN, ale twoje strony za każdym razem żądają obrazów z powodu braku nagłówków pamięci podręcznej, brakuje ci nisko wiszących owoców. Panel Net Firebug może szybko dać ci szybki podział czasu wczytywania strony, a Page Speed ​​/ YSlow może zaoferować kilka dobrych wskazówek, które pomogą.


26
Mniejsze prawdopodobieństwo zablokowania? Chciałbym wiedzieć, jak wpadłeś na ten pomysł. Sieć MS i tak nie jest stwardnieniem rozsianym, to akamai, którzy robią serwery z równoważeniem obciążenia znacznie dłużej niż Google, co czyni nonsens z „lepszym systemem awaryjnym”. Naprawdę, jeśli masz zamiar wysuwać takie roszczenia, dowody byłyby fajne.
blowdart

16
Niektóre firmy, a ja pracowałem dla kilku, blokują * .microsoft.com wprost w ramach blokowania aktualizacji systemu Windows. Czy to jest poprawne? Nie, czy to się dzieje? Tak. Przykład: ajax.microsoft.com/...jest objęty blokiem * .microsoft.com, a nie wyjątkiem www, jest blokowany, gdy firma zdecyduje się zablokować cokolwiek innego niż www.microsoft.com. Nie powiedziałem, że to bardzo prawdopodobne, powiedziałem, że jest bardziej prawdopodobne, ponieważ nigdy nie widziałem, aby Google był zablokowany, ale widziałem odwrotnie.
Nick Craver

5
I widziałem, jak Google zablokował się, aby zatrzymać Gmaila na stronach rządowych. Ponieważ jednak jest to tak rzadkie, w tym przypadku nie próbowałbym użyć go jako uzasadnienia.
blowdart

19
Odkąd to napisano, MS dodało jQuery-UI do swojego CDN: asp.net/ajaxlibrary/cdn.ashx#Using_jQuery_UI_from_the_CDN_10
Czy Dean

3
@Nick Microsoft przeniósł swoją CDN z ajax.microsoft.com do ajax.aspnetcdn.com. Dlatego nie ma szans na zablokowanie CDN Microsoftu w ramach blokowania aktualizacji systemu Windows.
Sachin Joseph,

88

Powinieneś bezwzględnie używać Google CDN do jQuery (i pochodzi od dewelopera zorientowanego na Microsoft).

To proste statystyki. Ci, którzy rozważą użycie MS CDN dla jQuery, zawsze będą mniejszością. Jest zbyt wielu programistów spoza MS, którzy używają jQuery, którzy będą używać Google i nie chcieliby używać Microsoft. Ponieważ jednym z dużych zwycięstw w publicznej sieci CDN jest poprawione buforowanie , podział użycia na wiele sieci CDN zmniejsza potencjał tej korzyści.


7
jeśli będziemy tak myśleć, tylko większy będzie mógł oddychać. Nie używaj google, ponieważ jest to Google i zakładaj, że wszyscy są przy nim (bez wątpienia większość z nimi jest). Ale pozwól najlepiej wygrać, porównać wynik i iść z nimi.
mamu

20
To nie jest założenie. Witryny w rankingu 200 000 Alexa korzystającym z sieci CDN Google przewyższają liczebnie Microsoft ponad 100: 1. Jeśli chodzi o popularność buforowania, jedyną zaletą MS jQuery CDN jest to, że Microsoft.com korzysta z niego, co daje mu dużą widoczność z tego samego odwołania (ale nie tak bardzo, jak tysiące najlepszych witryn odwołujących się do Google ).
Dave Ward

@DaveWard, czy możesz sprawdzić, czy nadal tak jest, czy też tabele zmieniły się nieco w ciągu ostatnich kilku lat?
wulgarny

3
@snumpy: Google CDN dość mocno rozwinął swoją przewagę nad tym, co widziałem. Nie ma nic złego w Microsoft CDN. Jest szybki i ma kilka plików, których Google nie ma. Korzyści z buforowania między witrynami zależą jednak od zasięgu w całej sieci, a Google dominuje pod tym względem we wszystkich innych.
Dave Ward

Ponieważ przeniosłem się z jQuery CDN do Microeoft's do obsługi jQuery Mobile, przeniosłem moje inne pliki do pobrania jQuery do niego z Google, aby zmniejszyć liczbę rund DNS. Jeszcze jeden czynnik :)
Rob Grant

20

Google prześle Ci wersję jQuery zminimalizowaną własnym oprogramowaniem, ta wersja jest o 6 KB lżejsza niż standardowa zminimalizowana wersja obsługiwana przez MS. Idź do Google.


18

Jedną drobną rzeczą do rozważenia jest to, że obie firmy oferują nieco inne „dodatkowe” biblioteki:

W zależności od potrzeb może to mieć znaczenie.


23
Odkąd to napisano, MS dodało jQuery-UI do swojego CDN: asp.net/ajaxlibrary/cdn.ashx#Using_jQuery_UI_from_the_CDN_10
Will Dean

15

Należy również zauważyć, że ponieważ ajax.microsoft.com jest subdomeną żądań microsoft.com, wysyłaj wszystkie pliki cookie microsoft.com, zwiększając całkowity czas potrzebny na odzyskanie pliku.

Ponadto ajax.microsoft.com używa domyślnej kompresji IIS7, która jest gorsza od standardowej kompresji używanej przez inne serwery WWW.

http://ajax.microsoft.com/ajax/jquery/jquery-1.4.4.min.js - 33,4 tys.

http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js - 26,5 tys.

Ponadto, jak wspomnieli inni, Google CDN jest znacznie bardziej popularny, co znacznie zwiększa szansę na buforowanie pliku.

Więc zdecydowanie polecam korzystanie z Google.


3
W tym czasie był to dobry sprzeciw, ale nie ma już zastosowania, ponieważ zalecana nazwa domeny CDN to teraz ajax.aspnetcdn.com. Blokowanie sprzeciwu * .microsoft.com również nie ma już zastosowania.
Stephen Kennedy,

to prawda. Cieszę się, że w końcu naprawili tę część. Teraz nie czuję się tak źle z powodu włączenia wtyczki sprawdzania poprawności / cyklu z ms cdn.
Alistair,

Ciasteczka również nie obowiązują z powodu przejścia na aspnetcdn.
Rob Grant,

11

Prawdopodobnie nie ma to znaczenia, ale można to sprawdzić za pomocą niektórych testów A / B. Wyślij połowę ruchu do jednej sieci CDN, a połowę do drugiej, i skonfiguruj profilowanie w celu zmierzenia odpowiedzi. Wydaje mi się, że ważniejsza jest możliwość łatwej zmiany na wypadek, gdyby jeden lub drugi miał poważne problemy z niedostępnością.


7

Wiem, że trochę się tutaj spóźniam, ale oto kod, którego używałem w produkcji. Nigdy nie miałem z tym problemów, ale przebieg może się różnić. Upewnij się, że przetestujesz go we własnym środowisku.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>    
<script type="text/javascript">
    !window.jQuery && document.write('<script src="/scripts/jquery-1.4.2.min.js"><\/script>')
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    !window.jQuery.ui && document.write('<script src="/scripts/jquery-ui-1.8.2.min.js"><\/script>')
</script> 

1
Niestety niektóre przeglądarki (IE6) nie opóźnią przetwarzania tego skryptu online, dopóki nie zostanie załadowany skrypt src =, więc nie będzie działać zgodnie z oczekiwaniami. Szkoda, że ​​nie!
Walden Leverich

2
Tak więc użytkownicy IE6 doświadczają nieco wolnego działania. Dobry kompromis, jeśli mnie o to poprosisz. IE6 spada ... nawet w korporacyjnych intranetach.
Armstrongest,

7

Chodzi o statystyki: jquery.com ładuje jQuery z Google. Podobnie Twitter, Stackoverflow i wiele innych. Istnieją więc całkiem duże możliwości, że użytkownik Twojej witryny już go buforuje = brak pobierania .

Zapomnij o walidatorze, przepustowości i szybkości, ponieważ jest to główna zaleta. W przeciwnym razie każda inna opcja CDN będzie działać zasadniczo na tym samym poziomie.


1
Tak, ale Twitter (zgodnie z encosia.com/2010/09/15/... Dave'a Warda ) korzysta z jQuery 1.3.0 (na „starym” Twitterze), więc nie mają one tak naprawdę znaczenia ... jeszcze ...
veggerby

Witryny, które zrobiłem jakiś czas temu, nadal używają jQuery 1.3.0, podobnie jak (stary) Twitter. To zawsze ma znaczenie.
achairapart

6

Czy jeden jest potencjalnie szybszy od drugiego?

Właściwie sam byłem tego ciekawy, więc skonfigurowałem stronę testową jsbin, używając każdego z poniższych, a następnie uruchomiłem ją za pomocą narzędzia do porównywania wizualnego webpagetest.org. Testowałem:

  1. ajax.googleapis.com
  2. code.jquery.com
  3. ajax.aspnetcdn.com
  4. cdnjs.cloudflare.com

Kto był najszybszy: code.jquery.com o 0,1 sekundy w obu testach

Kto był najwolniejszy: ajax.aspnetcdn.com o 0,7 sekundy w pierwszym teście i ajax.googleapis.com o 1 sekundę w drugim teście

Oto pierwszy test (każdy został przetestowany 3 razy):

Wideo: http://www.webpagetest.org/video/view.php?id=121019_16c5e25eff2937f63cc1714ed1eac814794e62b3

Raporty: http://www.webpagetest.org/video/compare.php?tests=121019_D2_KF0,121019_9Q_KF1,121019_WW_KF2,121019_9K_KF3

Oto drugi test (po 3 kolejne):

Wideo: http://www.webpagetest.org/video/view.php?id=121019_a7b351f706cad2c25664fee7ef349371f17c4e74

Raporty: http://www.webpagetest.org/video/compare.php?tests=121019_MP_KJN,121019_S6_KJP,121019_V9_KJQ,121019_VY_KJR


4

Jak stwierdził Pingdom :

Gdy ktoś odwiedza Twoją witrynę, jeśli odwiedził już inną witrynę, która korzysta z tego samego pliku jQuery w tej samej sieci CDN, plik zostanie buforowany i nie trzeba go wcale pobierać. Nie może być szybszy.

Oznacza to, że najczęściej używane CDN będzie miało po swojej stronie szanse, które mogą się opłacić dla Twojej witryny.

Kilka uwag na temat wydajności: CDN Google jest konsekwentnie najwolniejszym z trzech w Ameryce Północnej i Europie. W Europie CDN Microsoftu jest najszybszy.


3

Myślę, że to zależy od tego, gdzie jest twoja grupa docelowa. Możesz użyć alertra.com, aby sprawdzić prędkość CDN z wielu lokalizacji na całym świecie.


To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienia, zostaw komentarz pod postem.
Fiona - strona myaccessible.web

1
Dla Fiony jest to moja odpowiedź na pytanie. Pytanie brzmi „czy to ma znaczenie”, moja odpowiedź brzmi „zależy od tego, gdzie znajduje się jego grupa docelowa”, a ja zapewniłem witrynę, aby przetestować prędkość z różnych miejsc na świecie, aby pozwolić mu zdecydować, z której sieci CDN należy skorzystać. To nie jest komentarz, to odpowiedź.
cichy

3

Jedna dodatkowa uwaga - jeśli Twoja witryna obsługuje protokół SSL i musisz obsługiwać system Android 2.1 (lub wcześniejszy), certyfikat SSL w wersji HTTPS Microsoft CDN spowoduje awarię tych wersji przeglądarki Android, w związku z tym problemem: http: // code .google.com / p / android / Issues / detail? id = 5001 . To nie jest „wina” Microsoftu, ponieważ certyfikat SSL jest technicznie ważny, a usterka dotyczy implementacji SSL Androida ... ale mimo to spowoduje awarię witryny.

Certyfikat SSL w sieci CDN Google nie jest obojętny na ten konkretny problem (odnoszący się do „alternatywnej nazwy podmiotu certyfikatu”).

Tak więc do obsługi SSL + Android 2.1 użyj sieci CDN Google.


2

Moja odpowiedź jest nieco inna niż inne. Jeśli potrzebujesz walidatora jquery, skorzystam z Microsoft, który prawie wszyscy potrzebują, jeśli używasz jquery.

Połączenie http Microsoft CDN to Keep-Alive, co jest dużym plusem, gdy żądasz wielu elementów.

Więc jeśli potrzebujesz sprawdzania poprawności jquery, skorzystaj z Microsoft CDN, nawet jeśli potrzebujesz jquery ui, skorzystaj z Microsoft, ponieważ Google nie utrzymuje aktywności, więc każde żądanie jest samodzielne. więc mieszanie w ten sposób jest plusem. jeśli używasz Microsoft tylko do sprawdzania poprawności, to dla każdego żądania wykonujesz osobne połączenie z serwerem Google.



1

Podczas korzystania z Google CDN należy również wziąć pod uwagę, że czasami ludzie tworzą literówki, takie jak ajax.googelapis.com. Może to potencjalnie stworzyć naprawdę paskudny atak xss (cross site scripting). Naprawdę to przetestowałem, rejestrując literówkę googlapis.com i bardzo szybko znalazłem, że obsługuję żądania javascript, map, css itp.

Wysłałem e-mail do Google i poprosiłem o zarejestrowanie podobnych adresów URL literówek CDN, ale nie otrzymałem odpowiedzi. Może to być prawdziwy powód, aby nie polegać na sieciach CDN, ponieważ potencjalnie niebezpieczni napastnicy oczekują na prośby o literówkę i mogą łatwo obsługiwać zapytania zwrotne itp. Z ładunkiem xss.

Dziękuję Ci


1
może trochę nie na temat, ale interesujący punkt.
achairapart

1

W zależności od branży, dla której aplikacja jest kierowana, możesz nie chcieć używać sieci CDN zarządzanej przez inne organizacje. Często rodzi to problemy dotyczące zgodności, prywatności i poufności.

Na przykład po włączeniu Google Analytics do bezpiecznej aplikacji przeglądarka nadal wysyła bieżący adres URL jako nagłówek „strony odsyłającej”. Wszelkie identyfikatory, powiedzmy identyfikator sesji lub tajny token mogą pojawić się w ich logach. Na przykład, jeśli adres IP klienta 192.0.2.5 odnosi się do https: //healthsystem.example/condition/impotence , wówczas można wnioskować o informacji, która jest uważana za raczej prywatną.

Inne przypadki zawierają informacje o skutkach, takie jak numer konta, numer ubezpieczenia społecznego lub informacje o sesji w adresie URL. Tego rodzaju dane nigdy nie powinny znajdować się w adresie URL, ponieważ można ich używać poza aplikacją.

Chociaż możesz ufać Google, Microsoft lub Yahoo, Twoi użytkownicy mogą nie.

W branżach takich jak finanse, opieka prawna i opieka zdrowotna możesz założyć własną sieć CDN przy pomocy sprzedawcy (np. Akamai), z którym możesz podpisać umowę licencyjną.


1

Radzę, abyś opierał swoje użycie na ogólnej lokalizacji użytkowników, na których jesteś kierowany.

Jeśli Twoja witryna jest skierowana do ogółu społeczeństwa, dobrym wyborem będzie skorzystanie z usługi CDN firmy Google.

Jeśli Twoja witryna jest również skierowana do Chin, lepszym wyborem byłoby skorzystanie z CDN firmy Microsoft. Wiem z mojego doświadczenia, ponieważ serwery Google były blokowane przez chiński rząd, co uniemożliwiało ładowanie stron internetowych, które ich używają.

* Pamiętaj, że możesz stworzyć witryny specyficzne dla regionu, np. Cn.mysite.com, aby zaspokoić potrzeby Chin, ale jeśli masz mało zasobów i czasu, warto to rozważyć.

Pełna lista Microsoft CDN tutaj. http://www.asp.net/ajaxlibrary/cdn.ashx

Od tego czasu zmieniono nazwę na ajax.aspnetcdn.com , co zmniejsza prawdopodobieństwo zablokowania przez reguły zapory.


-3

Użyłbym obu!

Ponieważ hosting Google Jquery jest już o wiele dłuższy, szanse są znacznie większe, że ludzie będą już go buforować w porównaniu do Microsoft, więc chciałbym mieć go jako pierwszy.

Osobiście użyłbym czegoś takiego -

if (typeof jQuery == 'undefined') {  
    // jQuery is not loaded  

  document.write("<scr" + "ipt type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></scr" + "ipt>");
        }
} else {
    // jQuery is loaded
}

(Nie jestem pewien, czy to w 100% działa, ale zamierzałem tylko napisać pomysł, a nie przykład - dotyczy to hostowanej przez Google Jquery, a nie Microsoft, ponieważ nie mogłem znaleźć linku)


6
jQuery nigdy nie zostanie zdefiniowany, chyba że umieścisz go na swojej stronie. Buforowanie pliku .js doe snot domyślnie udostępnia go wszystkim stronom przeglądarki!
Falkayn

1
Działa to: S Ponownie przeczytaj skrypt - jeśli nie jest zdefiniowany, zapisuje to i ładuje?
Wil

12
Nigdy nie zrozumiałem, dlaczego ludzie robią „<scr” + „ipt ...”
anonimowy tchórz

3
„W zależności od przeglądarki, ilości innych poprzedzających javascript i tego, jak dobrze uformowany jest ogólny kod, ma to na celu zapobieżenie interpretacji przez parser tagów <script> i </script> jako kodu wykonywalnego, a nie łańcucha do napisania."
SeanJA

2
Problem polega na tym, jQueryże nigdy nie zostanie zdefiniowany, dopóki go nie załadujesz. W twoim skrypcie pierwsza gałąź zawsze będzie wykonywana (chyba że masz inne włączenie jQuery powyżej), co czyni skrypt zbędnym.
jensgram
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.