Tento blog je v současné době uzavřen.
Pokračování blogu na bloguje.cz jsem zrušil. Pokud budu někdy pokračovat, bude to spíš tady.
Při načítání webové stránky se čas asi zpomalí a těsně před událostí onLoad naopak šíleně zrychlí. Jinak nevím, jak si vysvětlit, proč mezi dvěma událostmi, které dělí načtení přibližně 60 KB kódu, uplyne podle Javascriptu kratší čas než mezi událostmi, mezi nimiž se už skoro nic nenačítá.
Tohle záhadné chování zkazilo Yuhůovi dobře vymyšlené měření. Podstatou měření bylo, že na začátek a konec těla stránky se dala dvě místa, kdy se pomocí Javascriptu zaznamenal aktuální čas na počítači uživatele. Mezi měřicími místy bylo několik desítek KB. Logická úvaha říkala: jak uživatel stránku načítá, tato se postupně zpracovává a vykresluje; tudíž volání Javascriptu v měřicích místech odpovídá skutečnému času, kdy řádek s tímto voláním dorazil po síti do počítače uživatele a byl zpracován. Rozdíl časů v obou měřicích místech by pak měl odpovídat době, za kterou se přenesl kód mezi nimi.
Ukázalo se ovšem, že tohle z nějakého důvodu nefunguje. Časové rozdíly, které Yuhů zjistil z logu Českého hostingu a do nichž mě nechal nahlédnout, byly neuvěřitelně malé (asi 10 % z nich bylo menších než 20 ms, což by v přepočtu znamenalo rychlosti přes 2 MB/s).
Pokoušel jsem se to vysvětlit kešováním stránky a kompresí (že by se stránka prostě nejdřív přenesla zkomprimovaná a zpracovala naráz, což by vysvětlovalo tak malé rozdíly času). A pro kontrolu jsem začal měřit také, vypnul kešování a přidal ještě jeden měřicí bod na událost onLoad. Počet měření zatím není nijak velký, ale jedno je jasné: časové rozdíly mezi začátkem a koncem těla stránky jsou v naprosté většině případů mnohem menší než rozdíly mezi koncem stránky a událostí onLoad. Podotýkám, že v měřicí stránce nemám žádné obrázky ani počitadlo.
Tomu nerozumím. Co trvá tak dlouho mezi zpracováním posledních řádků a událostí onLoad? A jak to, že mezi krajními body zpracování 60 KB je tak malý čas? Napadá mě snad jen to, že se možná stránka někde předzpracovává a javascripty volají ještě dřív, než dorazí ke klientovi. Ale to je skoro sci-fi.
Aktualizace: Z článku Dave Hyatta (via komentář Milana Kryla, David Majda) vyplývá, že prohlížeče nevykreslují stránku přesně průběžně, jak dorážejí data. Nejdřív si kus stránky nakřečkují a až ve chvíli, kdy si na to troufnou, začnou vytvářet renderovací strom (rendering tree). To by teoreticky mohlo vysvětlovat, proč je mezi zpracováním začátku a konce stránky tak malý časový rozdíl.
Další články si můžete vyhledat v jednotlivých přihrádkách, případně podle data.
© Honza Hučín 2004–6
Šuplík běží na PIPNI.CZ. Díky!
8. 8. 16:48 | Pepa
7. 8. 21:26 | Honza Hučín
7. 8. 21:02 | Honza
6. 8. 14:29 | Pepa
3. 8. 18:29 | Honza
*1967, absolvent MFF UK v Praze (1991)
statistik, analytik, programátor, učitel, hudebník