2011-02-10 12 views
8

Dlaczego Google zaleca umieszczanie skryptów js przed asynchronicznym kodem śledzenia w swoim html? http://code.google.com/apis/analytics/docs/tracking/asyncMigrationExamples.htmlDlaczego Google zaleca składanie kodu asynchronicznego Analytics * po * skryptach w wersji <head>?

Oto cytat:

„Uwaga: W celu zapewnienia najbardziej usprawnione działanie asynchronicznego fragmentu w stosunku do innych skryptów, zalecamy umieszczenie innych skryptów w witrynie w jeden z następujących sposobów: przed fragmentem kodu śledzenie w sekcji kodu HTML”

Odpowiedz

4

Zadaniem asynchronicznego analityka jest załadowanie bardziej intensywnego skryptu, który sprawdza przeglądarkę użytkownika pod kątem wszelkich informacji umożliwiających ich identyfikację, aby mógł on zgłosić się do serwera analitycznego. Ponieważ jednak wszystkie te dane analityczne nie mają decydującego znaczenia dla użyteczności strony, Google chce ją uruchomić w wygody przeglądarki.

Teoretycznie mogą doradzić programistowi dodanie asynchronicznego fragmentu na samym dole strony, jako ostatniego elementu ciała. Jednak, aby umożliwić programistom przechwytywanie zdarzeń interfejsu użytkownika, które mają być wysyłane do analiz, chcą one wcześnie wprowadzić zmienną _gaq. Na przykład możesz mieć przycisk: <button onclick="_gaq.push(...)">Track</button>. Dzięki wczesnemu udostępnieniu _gaq, mały fragment kodu w asynchronicznym fragmencie będzie umieszczał te wiadomości w kolejce, a cięższy ga.js wyśle ​​je później na serwer.

Teraz niektóre implementation details: ga.js jest ładowany poprzez dodanie nowego <script> element do głowy dokumentu z ustawionym atrybutem async. IE i WebKit będą asynchronicznie ładować znaczniki <script> wstawione ze skryptów. Firefox i Opera honorują atrybut async, a także ładują skrypt asynchronicznie. Tak czy inaczej, ga.js jest ładowane asynchronicznie, w wygody przeglądarki.

Wreszcie, po wykonaniu , bez blokowania renderowania strony z powodu asynchronicznego ładowania, może wykonać ciężką pracę polegającą na zebraniu wszystkich danych użytkownika i wszelkich wiadomości w kolejce _gaq i wysłaniu ich na serwer.

Podsumowanie: Podejście to wykorzystuje niewielki wbudowany skrypt, który inicjuje kilka kluczowych zmiennych jak _gaq że strona może mieć dostęp przed pełnym ga.js skrypt jest gotowy. Ten mały skrypt dynamicznie dodaje do dokumentu znacznik <script src="ga.js"> w taki sposób, że większość przeglądarek pobierze je i wykona asynchronicznie, bez blokowania renderowania strony lub oceny krytycznych skryptów.

+0

I rzeczywiście przegłosowałem tę odpowiedź początkowo, ale po przeczytaniu i ponownym przeczytaniu jej ponownie ma sens ... to była część, która wyzwoliła dla mnie żarówkę ... "Wreszcie, po uruchomieniu ga.js, bez blokowania renderowanie strony z powodu asynchronicznego ładowania, może wykonać ciężką pracę polegającą na zebraniu wszystkich danych użytkownika i wszelkich wiadomości w kolejce _gaq i wysłaniu ich na serwer "... więc w zasadzie, jeśli umieścisz skrypty w na dole strony, mówisz do google, że nie masz nic przeciwko ładowaniu skryptów PO strony, więc używaj analityki przed nimi! – concept47

2

jako przeglądarka ładuje stronę, robi to od góry do dołu. Przeglądarki mają ograniczoną liczbę "połączeń", za pomocą których można ładować zewnętrznie połączone dokumenty. Jeśli umieścisz swój skrypt nad swoim, twoje własne skrypty nie zostaną załadowane, dopóki ich nie ukończą. Kod analityczny nie ma krytycznego znaczenia dla funkcjonalności strony, więc możemy go zapisać na samym końcu.

+0

Ale Google podkopuje niezawodność swoich serwerów, posuwając się nawet do zalecenia, że ​​użytkownicy nie będą używać lokalnego kodu ga.js, ponieważ jego zoptymalizowany i prawdopodobnie buforowany w przeglądarkach użytkownika na całym świecie ... nie ma sensu mnie, że tak będzie, zwłaszcza, że ​​ładuje się równolegle i nie blokuje jak inne skrypty. – concept47

+0

Koncepcja "równolegle" jest ograniczona liczbą wątków, które przeglądarka może przeznaczyć na asynchroniczne żądania dla połączonych plików. Firefox, IIRC, jest ograniczone do 6.Niezależnie od tego, jak szybki jest serwer Google, jest on wciąż ograniczony (w tym przypadku) szybkością połączenia KLIENTA, ponieważ przeglądarka ładuje stronę i wszystkie powiązane dokumenty. Załóżmy więc, że użytkownik ma połączenie telefoniczne - chcesz, aby Twoje skrypty ładowały się przed Google Analytics, ponieważ twoje skrypty ** mogą ** wpływać na użyteczność, a Google ** z pewnością ** nie, i może to być ** minut ** przed następny wątek asynch jest otwarty. –

+0

^Jeśli tak, to dlaczego zaleca (w tym samym łączu), aby umieścić te skrypty "* po * zarówno fragment kodu śledzenia, jak i całą zawartość strony (np. Na dole treści HTML)"? – concept47

Powiązane problemy