Neblokující JavaScript

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).

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Komentáře: 6

Přehled komentářů

loki Hm....
jos Re: Hm....
pozortucnak jednovláknový?
Martin Malý Re: jednovláknový?
pozortucnak Re: jednovláknový?
Martin Malý Re: jednovláknový?
Zdroj: https://www.zdrojak.cz/?p=1514