Neblokující JavaScript
Nálepky:
JavaScript je v prohlížečích implementován převážně jako jednovláknový interpret, což přináší některé nevýhody, z nichž nejviditelnější je nutnost čekat, pokud se někde provádí dlouhý výpočet. Starší prohlížeče navíc kdykoli narazily na <script>
, tak zastavily provádění dalších operací, dokud se skript nestáhl a nevykonal. Moderní dokáží stahovat skripty paralelně a vykonat je ve správném pořadí. HTML5 přichází s atributem async
, který říká prohlížeči, že má skript nahrát asynchronně, tj. podobným způsobem jako když je tag script vytvořen skriptem. Zajímavé informace k tomuto tématu jsou v článku What is a non-blocking script.
S pěkným nápadem přichází LABjs, neboli Loading and Blocking JavaScript. Tato knihovna, zjednodušeně řečeno, přidává „syntaktický cukr“ a balí nevzhledný zmatek statických elementů script
a dynamicky vytvářených a nahrávaných elementů script
do úhledné podoby. Namísto
<script src="framework.js"></script> <script src="plugin.framework.js"></script> <script src="myplugin.framework.js"></script> <script src="init.js"></script>
tak můžeme s LABjs psát:
<script> $LAB .script("framework.js").wait() .script("plugin.framework.js") .script("myplugin.framework.js").wait() .script("init.js"); </script>
Výše uvedený zápis spustí neblokující nahrávání framework.js, který musí být vykonán jako první. Na něm závisí skripty plugin a myplugin, které mohou být staženy a vykonány v libovolném pořadí, nejsou na sobě závislé. A až jako poslední musí být spuštěn skript init. Vše je jasné a pochopitelné ze zápisu. LABjs nabízí i další možnosti, jako např. zavolat callback funkci poté, co jsou skripty načtené (ve funkci wait).
Inu, proc to delat podle standardu(html5), kdyz to jde slozite pres uzasny framework. Vysledny kod je hnusny a nestandardni…
HTML5 je už standard?
jednovláknový?
A co potom tedy bude toto?
Tak si to zkuste. :)
nejaký divný, funkce setTimeout by přece NĚMĚLA zastavit provádení scriptu…
Však ona ho nezastaví. Doporučuju přečíst i článek o Web Workers, tam je popsané jak udělat „opravdu souběžné“ procesy ve více vláknech.