AJAX fejlesztés - tapasztalatok
AJAX fejlesztés
A buktatót úgy hívják, hogy Internet Explorer. Elkövettem azt a hibát, hogy a CSS+XHTML oldalkialakítás során már bevált sorrendet alkalmaztam, és az Explorert a fejlesztés végére hagytam. Míg egy CSS alapú oldalkialakításnál, ha Firefoxot használok a fejlesztés alatt, akkor az Internet Explorerre illesztés a végén a munkának az 5%-át jelenti (nem túl jelentős rész) -, addig az AJAX fejlesztés során összemérhető időt vehet el az optimalizálás, nem csak a munka nagysága, de az igazán jó eszközök hiánya miatt is.
Az alkalmazás egyik követelménye az volt, hogy elviselhető mértékben használja ki a gép processzorát. A program nagy része már elkészült, amikor kiderült, hogy az addig Firefoxban kiválóan működő programmal Internet Explorer alatt jelentős teljesítmény problémák vannak. Az adatok szerverről letöltése és előfeldolgozása 100%-ra vitte fel a processzorhasználatot, és ott is tartotta úgy, hogy közben a böngésző gyakorlatilag használhatatlanná vált. Be kellett látnom, hogy az Explorer JavaScriptje sok esetben jóval lassabb és processzor igényesebb, mint a Firefoxé.
Az alkalmazás logikája szerint az adatokat bizonyos szempontok szerint a letöltés közben rendezni kell, és folyamatosan megjeleníteni a legjobb 10 találatot. A rendezéshez egy saját egyszerű rendezési algoritmust írtam (talán sima buborékrendezés volt), ami párszáz elemű tömbnél IE alatt már elviselhetetlenül lassúnak bizonyult. A JavaScriptnek van viszont egy beépített rendezési lehetősége, ami elég jól paraméterezhető: megadható neki egy függvény, ami a rendezés során az összehasonlításokat végzi. Az erre való áttérés egy nagyságrendet gyorsított, de még így is lassú volt a rendezés egy adott adatmennyiség felett. A megoldást végül az jelentette, hogy mindig csak a legjobb 10 és az éppen letöltött adatok kerülnek rendezésre, a kalapban mindig csak a legjobb 10-et bennhagyva végül. Ezen kívül a rendezési függvényt is minimálisra kellett leszorítani, hiszen nagyon sokszor került meghívásra.
Az AJAX fejlesztés / webalkalmazás fejlesztés során az egyes számú tanulság számomra tehát az volt, hogy nagyobb adatmennyiségek használatakor oda kell rá figyelni, hogy mit és hogyan csinálunk, s a jó és hatékony működéshez bizony különböző trükköket is be kell vetni.
"Belső rendezés"
Rendezés
TrimQuery
TrimQuery-t néztétek most, vagy valaha is, van vele kapcsolatban vkinek pozitív-negatív tapasztalata ?
http://trimpath.com/project/wiki/TrimQuery
Jó lenne
quick sort
Felhő
array.sort
Ha nem is...
Volt már nem egyszer olyan, hogy önmagában relative gyors, de rengetegszer végrehajtott művelet elfogadhatatlanná tette a futásidőt annak ellenére, hogy CLI szkript volt. Elkezdtem keresgélni a php manualban, találtam rá függvényt. Kb 1/8. annyi időbe telt.
Rendezés
sort()
függvényre áttértem volna, végigmentem pár algoritmuson, köztük a quicksort-on, de az adott helyzetben jobbon is (meg ne kérdezzed melyik, mert már nem tudom, mit találtam a neten - egy olyat, ami kevés összehasonlítással és adatmozgatással dolgozott), de egyik sem ért - értelemszerűen - a beépített C-ben (vagy miben írják az Explorert?) rendezés közelébe. Arra gondoltam, hogy esetleg találok egy olyat, ami a cserék és összehasonlítások kevesebb száma miatt mégis gyorsabb tud lenni, de nem jött be. Egy másik trükk, amit be akartam vetni, hogy nem az eredeti tömböt rendezem, hanem egy lebutítottat - gondoltam ha kevesebb adatmennyiséget kell mozgatni, az gyorsabb lehet - de ez sem vált be, a rendezés nem lett szignifikánsan gyorsabb, de a segédtömb használata miatt még lassabb is lett a végeredmény.quick sort
Akit esetleg bővebben érdekelnek a rendezések: informatika alapjai jegyzet - 21. és 33. oldal.
Idő
Gmail
Többször is kacérkodtam már a HTML verzióra való áttéréssel, de túl kényelmes vagyok :)
IE + gmail
Izgalmas téma
reklám
A geek programozó
Ajax vs. sok adat
A következő tapasztalataim vannak:
Nagy adatmennyiséget kezelni sem IE-ben, sem FF-ben, de főképpen Safariban nem érdemes, ilyen esetekre érdemes oldalfrissítést csinálni.
Az AJAX lényege éppen az apróbb változtatások, kisebb oldalrészletek frissítése lenne.
Amíg a JS fut, az IE gyakorlatilag áll.!
Tehát ezt figyelembe kell venni az oldal feldolgozásakor.
Nincs Sleep fgv, amivel közben végrehajtatnánk a többi threadet, mert ilyet nem csinál. :D
Az FF xmlHttpRequest objektuma memory leak-el, nem is kicsit.
Ahol (pár óra használat mellett) kb. 5-10 másodpercenként kérek adatot a szerverről (chat alkalmazás), az IE 40-50M memórával el van, ott az FF nem ritkán felkúszik 200-300M környékére. A kódot hatszor átnéztem, nem leakel (amennyire a JSben el lehet érni, hogy ne leakeljen :D)
Első körben ennyit.
Sleep
Sleep
Ez inkább reflektálás volt a cikkben található 100% CPU idő, illetve az állni látszék az IE felvetésre. Márminthogy, ezért állt.
ebbe már én is belefutottam.
nálam egy ldap lekérdetés eredményét (kb 600 találat) kellett rendezgetni.
ami még nehezített, hogy ezt az alkalmazást a pII-300MHz/128MB körüli gépeken is használni kellett.
ezért én is a phpben megfelelően rendezett adathalmazt küldözgetem vissza.
mivel intraneten használják, ezért ez kisebb overloadot jelent kliens szinten... mondjuk egy ilyen adathalmaz lerenderelése egy fent említett masinán 3-4 s (és közben az adathalmaz eleje már látható. tehát használható a lista), mig a rendezéssel együtt ez akár meg is tudta fagyasztani a gépet :(. Mondjuk én csak a legminimálisabbat optimalizáltam ie-re, mert sok a bugróka, és ha minden igaz akkor a kettőtől ez lesz a policy.
mrbond
ajax leírás
KF
ajax doksik
http://www.maxkiesler.com/index.php/weblog/comments/round_up_of_30_ajax_tutorials/
tenksz'
AJAXSLT
Nem
Kedvenc rendezés :))
A heapsort ugyebár helyben rendez, valamint alig lassabb mint "gyors" barátja.
Amúgy a Firefox Javascript-je talán azért gyorsabb, mert SpiderMonkey-t használ?
Egyébként meg a Javascript-et számolásra késztetni, búúú...
Hmm
Mi okozza?
Tutorial
- kisPocok -