Autor Zpráva
quatzael
Profil
Ahoj, potřeboval bych prosím stručně vysvětlit co všechno v js jede asynchronně. Zejména s různými úpravami HTML.
Když budu mít například jeden příkaz, který upraví něco v HTML, čeká vždycky js na to až se to upraví a potom přejde na další příkaz?
Např.
$("#input").val("ok");
alert($("#input").val());
Můžu se vždy spolehnout na to, že se v alertu objeví "ok"?
Martin2
Profil *
Asynchronní jsou v JavaScriptu jen události. Takže ano, můžeš se spolehnout.
Chamurappi
Profil
Reaguji na quatzaela:
co všechno v js jede asynchronně
Nic. (Když si odmyslíme Web Workery apod., které skoro určitě nepoužíváš.)
Akorát samozřejmě události nastávají jindy… konkrétně tehdy, kdy nastává příslušný děj. Událost kliku nastane při kliku, událost načasovaná na X sekund nastane po X sekundách, událost přijetí odpovědi ze serveru nastane při přijetí odpovědi ze serveru atd. – o tom všem lze říct, že se děje asynchronně. Což tak nějak vyplývá z logiky věci, není nutné si pamatovat výčet.

Když budu mít například jeden příkaz, který upraví něco v HTML
Uvedený příklad mění vlastnost value v DOMu, což nemusí mít dopad na HTML kód.

Můžu se vždy spolehnout na to, že se v alertu objeví "ok"?
Pokud je v #input něco, čemu jde nastavovat value, tak ano.
juriad
Profil
quatzael:
To, co jsi možná zaslechl, se týká optimalizace prohlížeče, že někdy nemusí změny vykonat okamžitě. To mu pomáhá nastřádat několik změn, a ty pak aplikovat najednou, což je rychlejší. Tebe jako uživatele JS to zajímat nemusí - prohlížeč se ve všech případech tváří, jako že změny přiřazením provádí okamžitě, včetně všech důsledků. Zajímavé pro tebe může být to, že je lepší (z hlediska rychlosti) se napřed zeptat na hodnoty všech vlastností, které tě zajímají, a pak až provést všechny změny, na rozíl od postupných dotazů a změn. Ale dokud nebudeš programovat nějaké střílečky, rozdílu v rychlosti si asi nevšimneš.

Bohužel nemám žádný odkaz pro podporu svého tvrzení; mohl by tp někdo upřesnit? Samotného mě to zajímá.
Str4wberry
Profil
Bohužel nemám žádný odkaz pro podporu svého tvrzení; mohl by to někdo upřesnit? Samotného mě to zajímá.

Před časem jsem o tom psal: Jak funguje vykreslování stránky

Konkrétně část: Jak funguje vykreslování stránky » Optimalisace překreslování
Kajman
Profil
Chamurappi:
Pokud je v #input něco, čemu jde nastavovat value, tak ano.

A nemůže se paralelně vykonat nějaká událost (třeba s nastavením jiné hodnoty) mezi nastavením a čtením hodnoty v ukázce?
quatzael
Profil
Martin2, Chamurappi, juriad, Str4wberry:
Díky za vysvětlení.
Radek9
Profil
Kajman:
V principu by se nic takového stát nemělo. JS běží na jednom vlákně, tudíž je potřeba, aby se nejprve uvolnil stack (tedy aby doběhl aktuální kód), než se může spustit další kód (např. událost).

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0