Te tradycyjne instrukcje od Google, w jaki sposób to ga.js
wykorzystanie document.write()
. Tak więc, nawet jeśli przeglądarka w jakiś sposób asynchronicznie ładuje zewnętrzne biblioteki JavaScript, dopóki jakiś kod nie zostanie faktycznie wykonany, document.write()
nadal będzie blokować ładowanie strony. Późniejsze instrukcje asynchroniczne nie używają document.write()
bezpośrednio, ale może insertBefore
również blokują ładowanie strony?
Jednak Google ustala, pamięć podręczna użytkownika max-age
do 86,400 sekund (wynosi 1 dzień, a nawet ustawić jako publiczny , więc zastosowanie również do serwerów proxy). Tak więc, ponieważ wiele witryn ładuje ten sam skrypt Google, kod JavaScript jest często pobierany z pamięci podręcznej. Mimo to, nawet gdy ga.js
jest w pamięci podręcznej, po prostu kliknięcie przycisku ponownego ładowania często powoduje, że przeglądarka pyta Google o jakiekolwiek zmiany . A potem, tak jak wtedy, gdy ga.js
nie było jeszcze w pamięci podręcznej, przeglądarka musi poczekać na odpowiedź przed kontynuowaniem:
POBIERZ /ga.js HTTP / 1.1
Host: www.google-analytics.com
...
Jeśli zmodyfikowano od: pon., 22 czerwca 2009 r., 20:00:33 GMT
Cache-Control: max-age = 0
HTTP / 1.x 304 nie zmodyfikowano
Ostatnia modyfikacja: pon., 22 czerwca 2009 r., 20:00:33 GMT
Data: niedziela, 26 lipca 2009, 12:08:27 GMT
Cache-Control: max-age = 604800, public
Serwer: Golfe
Zwróć uwagę, że wielu użytkowników klika wczytaj ponownie w celu wyświetlenia witryn z wiadomościami, forów i blogów, które już otworzyli w oknie przeglądarki, przez co wiele przeglądarek blokuje się do czasu otrzymania odpowiedzi od Google . Jak często ponownie ładujesz stronę główną SO? Gdy odpowiedź Google Analytics jest powolna, tacy użytkownicy od razu to zauważą. (W sieci opublikowanych jest wiele rozwiązań asynchronicznego ładowania ga.js
skryptu, co jest szczególnie przydatne w tego typu witrynach, ale może nie jest już lepsze niż zaktualizowane instrukcje Google).
Po załadowaniu i wykonaniu kodu JavaScript faktyczne ładowanie błędu internetowego (obrazu śledzącego) powinno być asynchroniczne. Tak więc ładowanie obrazu śledzenia nie powinno blokować niczego innego, chyba że strona używabody.onload()
. W takim przypadku, jeśli błąd sieciowy nie załaduje się szybko, kliknięcie przeładuj faktycznie pogarsza sprawę, ponieważ kliknięcie przeładuj spowoduje również, że przeglądarka ponownie zażąda skryptu, zgodnie z If-Modified-Since
powyższym opisem. Przed przeładowaniem przeglądarka tylko czekała na błąd sieciowy, natomiast po kliknięciu przeładuj również potrzebuje odpowiedzi dla ga.js
skryptu.
Dlatego witryny korzystające z Google Analytics nie powinny używaćbody.onload()
. Zamiast tego należy użyć czegoś takiego jak $ (document) .ready () z jQuery lub zdarzenie domready MooTools .
Zobacz także Omówienie funkcji Google , wyjaśniające, w jaki sposób Google Analytics zbiera dane? , w tym jak działa kod śledzenia . (Oznacza to również, że Google zbiera zawartość własnych plików cookie, czyli plików cookie z odwiedzanej witryny).
Aktualizacja: w grudniu 2009 firma Google wydała wersję asynchroniczną . Powyższe powinno nakazywać wszystkim aktualizację dla pewności, chociaż aktualizacja nie rozwiązuje wszystkiego .