Inu, proc to delat podle standardu(html5), kdyz to jde slozite pres uzasny framework. Vysledny kod je hnusny a nestandardni…
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).
Dále čtěte…
- Zlepšite svoje jQuery – OOP, menné priestory, pub-sub 1. 2. 2012 0:00
- Prasit, či neprasit? 13. 1. 2012 0:00
- Prezentace: testujeme JavaScript 2. 12. 2011 14:26
- OpenPGP v JS umožňuje šifrování pro webmaily 23. 11. 2011 9:30
- CSSPiffle.com hledá JS vývojáře 21. 11. 2011 19:26
Re: Hm....
celé vláknoHTML5 je už standard?
jednovláknový?
celé vláknojednovláknový?
A co potom tedy bude toto?
setTimeout( function(){/* ...NEJAKÁ ŠÍLENOST... */}, 0);
Re: jednovláknový?
celé vláknoTak si to zkuste. :)
setTimeout( function(){
document.write("---TIMEOUT---<br>");
}, 0);
for (var i=0;i<5000;i++) {
document.write(i+"<br>");
}
Re: jednovláknový?
celé vláknonejaký divný, funkce setTimeout by přece NĚMĚLA zastavit provádení scriptu…
Re: jednovláknový?
celé vláknoVš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.