Autor Zpráva
zbystr
Profil *
Zdravim,
mam tridu v JS, která prevede seznam /ul, li,/ na tree komponentu s checkboxy. vsechno funguje dobre az na:
Data která načítám z DB, jsou objemna, respektive je jich velke mnozstvi, asi kolem 6000 tis. polozek. Nedeste se ... vim, ze je to hodne. Jedna se o seznam okresu a nasledne obci techto okresu.
Pracuje to na princupipu ze pomoci DOM, si najdu LI, predne hodim checkbox ....


<ul id="tree">
<li>okres brno
<ul>
<li>obec 1</li>
<li>obec 2</li>
.......
</ul>
</li>
......
</ul>


problem je v tom, ze browser mi vyhodi hlasku, za script trva moc dlouho, zda ho chci pozastavit. (coz se mu ani nedivim) .... reseni, ktere mam naplanovane / a castecne rozpracovane / je pres AJAX, kdy se vzdy nacte seznam obci po otevreni vetve okres. Problem je, ze to potrebuji dodelat do nejake funkcni podoby do zitra a nejak nestiham to prekopat na AJAX.
A na co se chci zeptat? mno sam poradne nevim, zda nejaka myslenka jak to resit elegantneji nez prochazet <li> a pridavat jim pomoci createElement checkboxy. Respektive jak zabrani hlasce o dlouhotrvajicim scriptu.

Pokud by tu byl nekdo ochoten se mi na to podivat a pobavit se o tom, bylo by to mozne popripade i pres ICQ. Nebo pokud uz nekdo z vas toto provadel.

kdyztak moje ICQ je: 296062780

ZbySTr

Omlouvam se, zda tento prispevek nema hlavu ani patu, ale sedim dnes u PC uz moc dlouho :)
Chamurappi
Profil
Reaguji na zbystra:
Vytvoříš-li všechny checkboxy najednou pomocí nastavení innerHTML (nevadí-li, že tím současně znovuvytvoříš i všechny <ul> a <li>), měl bys pozorovat určité zrychlení. Metody DOMu bývají pomalejší, než interní HTML parser prohlížeče, kterým se rozebírá innerHTML.
zbystr
Profil *
hmm vyzkousim,
pres DOM se mi to zdalo elegantnejsi .... :)
tim padem to muzu vytvorit rovnou pres PHP (i checkboxy) a mam klid. Je pravdou, ze jsem to zezacatku resil jako univerzalni tree komponentu

Diky
ZbySTr
peta
Profil *
Chamurappi
"Metody DOMu bývají pomalejší, než interní HTML parser prohlížeče, kterým se rozebírá innerHTML."
Prosim te, tve prakticke zkusenosti opravdu nic moc :)
Zalezi pripad na pripadu, proste hadas reseni, jako obvykle ja. Ale momentalne chybne.

zbystr
"asi kolem 6000 tis."
Mel by ses opravdu zamyslet, jestli je to nutne tahat 6000, kdyz to muzes udelat jako to ma idos.cz, cili v pripade neshody ODKUD s mestem se navratit na formular a teprve zobrazit select s moznymi shodami.

Druhak, vyvaret 6000 checkboxu, to je opravdu... Ale budiz. Tady je ovsem dulezity odkaz na stranku. Je mozne, ze vytvaris nektere veci vicenasobne.
Zkus si treba tyto stranky:
http://www.volny.cz/peter.mlich/Pr/efekty/grafy.htm
http://www.volny.cz/peter.mlich/Pr/efekty/grafy0.htm
http://www.volny.cz/peter.mlich/Pr/efekty/grafy1.htm
http://www.volny.cz/peter.mlich/Pr/efekty/grafy2.htm
tam se vykresluje ruznymi metodami 2400 elementu
http://www.volny.cz/peter.mlich/hry/hry.htm
mazesmith generator - tam se zas vykresluje tabulka a je videt, ze v IE 100x100 trva o poznani dele nez ve FF. Ale FF to vykresli, aspon u mne do 10.000ms (kdy se pta na pokracovani scriptu)

Jak bych 6000 prvku resil ja? pomoci casovace, ktery bych po ukonceni znovu spustil, aby pokracoval ve vykreslovani, pokud jeste neskoncil.
Data bych nedaval do UL LI, ale do JS pole.
Cili vypadalo by to nejak takto:
a=0;
b=pole.length;
c=100;
spust_casovac() -> {
if (b>0)
{
d = (b>c) ? b-c : 0;
for b;d;b-- {vykresli prvek}
spust_casovac()
}
else zastav_casovac()
}
settimout, setinterval
zbystr
Profil *
to peta:
bez pouziti AJAX, je to nutne, jelikoz se jedna o formular, kde si user zaskrkne kam jeho cinnost spada, a resit pomoci reloadu stranky, kdy by se zobrazily obce se mi nezda dobre /respektive ani si to nedokazu predstavit, nebylo by to vubec user frendly/
co se tyka vytvareni veci vicenasobne, nevim presne co mas na mysli. Jedna se jenom o 2 level strom, takze .. mno nevim, co mas presne na mysli.
Omezenim zobrazovani tolika mnozstvi polozek budu resit, jak jsem jiz psal pomoci AJAXu, kdy se budou obce nacitat az po rozevreni vetve, takze to bude pote vyreseno. Mam zde nejake nesrovnalosti (v hlave), takze toto zatim davam stranou /jak jsem psal, tlaci me cas, aby to fungoval alespon tak jak ma bez AJAXu/

proc do UL/LI .... mno proto, ze to mela byt univerzalni trida, ktera by se dala pouzit i jinde a pro "cizi" lidi lehce implementovatelna /pak se s ni chci podelit :) /

Co se tyka pouziti casovace, bohuzel te nejak nechapu, jakej by to melo pro mne prinos ...

ZbySTr
peta
Profil *
zbystr
"respektive ani si to nedokazu predstavit, nebylo by to vubec user frendly"
proto ti stale pisi --- idos.cz --- ze si to zkus a uvidis, jestli je to friendly nebo ne. Shvalne si tam dej vychozi bod "Desna" a treba do Prahy
Netvrdim, ze se mi to tak libi, jen je to schopne reseni s malym prenosem informaci. Ajax pro 6000 polozek mi prijde o dost narocnejsi a nechci videt statistiky serveru.

"pouziti casovace - nechapu, prinos"
Aha :) Takze to napisi jinak...
Jo, ale jeste jsem zapomnel...
var pole = [
"moje obec1",
"obec2",
"obec3"
];

Kde treba v kombinaci s PHP
var pole = [

<?php
$obce = array(
"moje obec1",
"obec2",
"obec3"
);
echo implode($obce,",\n");
?>

];

Mno, a funkci spust a vypni casovac si napises pomoci z jedne funkci: settimout / setinterval
Vyhoda casovace je, ze bezi na pozadi.
Takze ty casovac zastavis, on neco provede a pak jej spustis a za rekneme 100ms provede pokracovani. Tim se vyhnes te neprijemne skutecnosti s hlaskou FF o ukonceni scriptu.
Viz treba:
http://www.volny.cz/peter.mlich/hry/hry.htm
souboj cerviku
http://www.volny.cz/peter.mlich/hry/cervi.htm
kde to vyuzivam jednak pro beh hry a druhak pri startu, aby se mi objevilo prosim cekejte, protoze v IE se to generuje jaksi pomaleji.
Samozrejme tam neni takove nacitani, zrovna jake potrebujes, ale ja myslim, ze s tim si uz poradis, ne?
peta
Profil *
zbystr
Tim 2 stromem myslel Chamurappi toto:

<ul id="tree">
<li>okres brno
<ul>
<li>obec 1</li>
<li>obec 2</li>
</ul>
</li>
</ul>

Jestli by nestacilo treba:
<div id="tree">
<b>okres brno</b>
<ul>
<li>obec 1</li>
<li>obec 2</li>
</ul>
</div>
cimz vznikne jenom nekolik jednoduchych stromu
Toto téma je uzamčeno. Odpověď nelze zaslat.