Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

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

Předchozí zprávička Následující zprávička        
loki
loki (neregistrovaný) ---.wa2.jcu.cz
24. 8. 2010 12:28 Nový

Hm....

celé vlákno

Inu, proc to delat podle standardu(html5), kdyz to jde slozite pres uzasny framework. Vysledny kod je hnusny a nestandardni…

jos
jos (neregistrovaný) 193.179.128.---
26. 8. 2010 13:20 Nový

Re: Hm....

celé vlákno

HTML5 je už standard?

pozortucnak
pozortucnak (neregistrovaný) ---.142.broadband4.iol.cz
25. 8. 2010 9:06 Nový

jednovláknový?

celé vlákno

jednovláknový?
A co potom tedy bude toto?

setTimeout( function(){/* ...NEJAKÁ ŠÍLENOST... */}, 0);

Martin Malý aura:93
25. 8. 2010 9:25 Nový

Re: jednovláknový?

celé vlákno

Tak si to zkuste. :)

setTimeout( function(){
        document.write("---TIMEOUT---<br>");
}, 0);
for (var i=0;i<5000;i++) {
    document.write(i+"<br>");
}
pozortucnak
pozortucnak (neregistrovaný) ---.142.broadband4.iol.cz
25. 8. 2010 11:03 Nový

Re: jednovláknový?

celé vlákno

nejaký divný, funkce setTimeout by přece NĚMĚLA zastavit provádení scriptu…

Martin Malý aura:93
25. 8. 2010 11:11 Nový

Re: jednovláknový?

celé vlákno

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.

Zasílat nově přidané příspěvky e-mailem        

Přehled názorů

Hm....
loki 24. 8. 2010 12:28
└ 
Re: Hm....
jos 26. 8. 2010 13:20
jednovláknový?
pozortucnak 25. 8. 2010 09:06
└ 
Re: jednovláknový?
Martin Malý 25. 8. 2010 09:25
 
└ 
Re: jednovláknový?
pozortucnak 25. 8. 2010 11:03
 
 
└ 
Re: jednovláknový?
Martin Malý 25. 8. 2010 11:11