Proč nám tuhnou webové prohlížeče aneb čert vem web 2.0
1. 7. 2008 – 12.55Comment by Trevor — September 18, 2007 on ajaxian.com:“It’s effing insane that we’re still doing this shit in 2007. IE’s COM dependency is going to be the death of us all.
Právě programuju jednu složitější webovou stránku – dynamickou prezentaci fotek s efekty crossfade, pan, zoom, dynamickým nahráváním fotek. Engine je v javascriptu. A ejhle! Problémem je, že Internet Explorer 7 a všechny jeho dřívější verze mají v sobě hrozně nepříjemnou a velice zásadní chybu – když se mu něco ve skriptech znelíbí, tak při přechodu na další stránku neuvolní alokovanou paměť a zabere novou. Po učité době, (záleží na tom kolik paměti skript spotřebuje a kolik máte paměti v počítači), proto IE zkolabuje. Pomůže pouze zavření celé aplikace Internet Explorer.
Vygoogloval jsem si, že je to známá chyba která je v jádru IE usazená už odedávna. Dříve ale nebyly webové stránky tak atraktivní a interaktivní jako dnes a proto se příliš neprojevovala. Dnes, v době webu 2.0, je to BIG problém. Stává se to velmi často – surfujete, a posléze se počítač hrozně zpomalí a nebo prohlížeč rovnou zatuhne – ve správci úloh pak zjistíte že prohlížeč sežral několik set megabajtů které nechce vyvrhnout zpět. Říká se tomu odborně „memory leak“.
Nevím, proč je pro tvůrce Internet Exploreru nemožné naprogramovat webový prohlížeč, který by při přechodu na další stránku prostě natvrdo uvolnil paměť kterou alokovala předchozí stránka, ale zjevně to zatím nedokázali. Současné i minulé verze Internet Exploreru jsou totiž pro Javascript pouze jakýmsi „hostitelským prostředím“ – ti dva spolu zdvořile komunikují pomocí DOM (Document Object Model for HTML), ale do kuchyně si vzájemně nevidí. Jinými slovy každý si spravuje nezávisle „svou“ paměť. Škoda. To, že lze udělat blbý Javascript který neuvolní alokovanou paměť je jasné, ale jádro IE by si to mělo „ohlídat“. Nezbývá než se vrátit k jednoduchým ale fungujícím webům, nebo si počkat a doufat ve spásu v podobě Internet Explorer 8…
Zkoušel jsem i Mozillu 3.0, ta sice paměť uvolňuje korektně, ale zato je pomalejší než Internet Explorer, a proto mne nezachrání…