Autor Zpráva
Suta
Profil
Dobrý den,
již tři hodiny hledám zdroj problému. Nastíním praktickou stránku.

- ve stránce se nachází panel, v němž dynamicky zobrazuji určitá data (z důvodu aktuálnosti jsou data načítána z databáze)
- při požadavku na refresh dat spouštím následující operace v tomto sledu:

1. v daném panelu zobrazím ikonu načítání (loading)
2. odešlu ajaxový požadavek
3. obdržím data z databáze (dejme tomu 500 řádků záznamu)
4. odeberu ikonu loadingu ze stránky (zde je onen problém - viditelné odebrání neproběhne hned, ale až po skončení operace v bodě 5)
5. spustím metodu, která na základě obdržených dat z databáze vytvoří příslušný html kód (např. tabulku s výpisem řádků)

Problémem je tedy to, že byť se v kódu operace skrytí ikony loadingu (4) nachází před operací vytváření html obsahu (5), provede se až po dokončení operací v bodě 5. Jinými slovy operace v bodě 5 trvá např. jednu vteřinu, k viditelnému skrytí dojde až po této době. Zajímavé je také to, že pokud dám v debugeru zarážku do bodů 4 a 5, pak k (viditelnému i fyzickému) odebrání dojde. Navíc, dám-li si v konzoli vypsat parentNode dané ikony před jejím odebráním a po jejím odebrání (těsně před a za bod č. 4), pak nejprve vlastnost parentNode existuje a posléze již ne, což je v pořádku (toto spouštím již bez zarážek v debugeru)!

Z toho mi vyplývá, že se jedná pouze o grafické zpoždění ve vykreslování při náročném cyklu. Na internetu jsem řešení podobného problému nenašel. Dá se toto nějak vyřešit?

Problém řeším ve větším projektu, pro ilustraci jsem však vytvořil tento speciální případ:

Ukázka "nežádoucího" chování - po každém spuštění je třeba obnovit stránku!
Chamurappi
Profil
Reaguji na Sutu:
Zavolat pátý bod z milisekundového setTimeoutu.
Pako
Profil *
v tomto clanku som nasiel: http://www.nczonline.net/blog/2009/02/03/speed-up-your-javascript-part-4/
Most browsers will not update the DOM while JavaScript is executing. Instead, they queue up the DOM interactions and apply them sequentially once the script has finished executing.
Suta
Profil
Reaguji na Chamurappiho:
Díky, pomohlo.

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