Pogledajte određenu poruku
Staro 25. 08. 2010.   #12
dee
Domagoj Horvat
Expert
 
Avatar dee
 
Datum učlanjenja: 24.07.2006
Lokacija: Zagreb
Poruke: 502
Hvala: 22
10 "Hvala" u 8 poruka
dee is on a distinguished road
Pošaljite ICQ poruku za dee
Default

Dakle, kratki rezime ako ce nekad nekome trebat...

Sto se tice renderiranja velikih tabela...

Ima ona prica o tome da IE ceka table ending tag, ali ima jos nesto sto nisam znao a danas naucih. Browser rendering engine i javascript su u istom threadu! Meni je to bilo zestoko otkrice. I zato browser ne moze renderirat sadrzaj dok se izvrsava neki javascript. Tu na scenu stupa setTimeout koji osigurava mrvu pauze da render engine preuzme rijec.


Ono sto sam napravio...

Prekodirao sam svoju grid kontrolu tako da sad osim grid.bind metode ima i grid.multipleBind. Razlika je u tome sto grid.Bind pocisti kontejner grid kontrole (dakle tablicu) prije rendanja, a grid.multipleBind ne cisti nego kreira novu. Obje metode, naravno, na svom kraju rade gridcontainer.appendChild(tabla).

Na mjestu gdje se poziva grid.bind (ili multipleBind) korisnik odlucuje sto mu treba i to na osnovi velicine JSON kolekcije koju dobiva kao ajax response. Tu ide neka chunkSize velicina (koja se moze izvuc u config file) i tad je slucaj:

a) collection.length < chunkSize => grid.bind(collection)

b) colelction.length > chunkSize =>

Ovdje imamo malo peripetija.
Napravio sam kratku rutinu koja podijeli kolekciju na x odsjecaka (kao pagination) i ide poziv na grid.multipleBind(chunk), ali ima jedna fora. Izmedju poziva mora ici:

setTimeout(closurePoziva)

Naime, iako imamo onoliko tabela koliko chunkova, svejedno browser ceka neki mali dio vremena da se sve izracuna pa tek onda da prikaze. Kako bi se napravio force DOM update, setTimeout sa par desetaka milisekundi rijesava stvar.


Nakon cijelo dana peripetija i zajebancije, moram priznat, hiljadu rekorda istrese na klijenta ko od sale. Radi fakat lijepo.

Eto, ako ce kome bit korisno, nek stoji.

Hvala svima jos jednom na komentarima.
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo
dee je offline   Odgovorite uz citat