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 |
#2 · Zasláno: 14. 3. 2013, 12:58:46
Reaguji na Sutu:
Zavolat pátý bod z milisekundového setTimeout u.
|
||
Pako Profil * |
#3 · Zasláno: 14. 3. 2013, 13:45:39
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 |
#4 · Zasláno: 14. 3. 2013, 18:48:16
Reaguji na Chamurappiho:
Díky, pomohlo. |
||
Časová prodleva: 11 let
|
0