összevont ajax pool

                                                  

gyakran azért mondunk le a vastagabb kliens oldali technikáról nagy látogatottságú lapokon, hogy kiméljük a szervert. a teljes oldalak kiszolgálása egy felhasználó esetén normál módon böngészőből indítva legdurvább esetben böngésző sebességétől függően másodpercenként 2 kérés (ekkor érdemben nem látom a tartalmat, csak amint villan valami a képernyőn, már nyomom is a frissítést) ezzel szemben ajaxot intenzíven használó oldal esetén a másodpercenkénti 20 kérés sem ritka.

mit lehet tenni? lehetne akár kliens, akár szerver oldalon pool-t kialakitani és abból csak a korábbi 2/sec sebességgel kiszolgálni a kéréseket. az eredmény siralmas. az oldal szinte azonnal elveszti a varázsát, megjelennek az egyre hosszabb ideig tartó pörgettyűk, loader-ek.
lehetne például az azonos kéréseket csoportosítani, és a pool-ban egyszerre legfeljebb egyetlen azonos tipusú kérést tartani. ez olyan esetekben még némileg működhet is, amikor az eredmény nem befolyásolja a többi kérést. például egy activity feed esetén, nem lesz abból baj, ha a másodpercenkénti lekérésekből kimarad néhány. szakmájához értő fejlszető ezeket amúgyis akkor időzíti be, amikor az előző kérés megérkezett. viszont több különböző, össze nem vonható kérés még mindig gátolja egymást. mi tehát a megoldás?
a megoldás tök egyszerű. ami nem vonható össze, azokat össze kell vonni, és használjunk pool-t :)
kliens oldalon a kérések random időközönként esnek be, mondjuk viszonylag gyakran. válasszunk egy nem túl fájóan hosszú, de mégis elég hosszú időtartamot arra, hogy mekkora legyen az az időtartam amilyen gyakran a szervert megszólithatjuk. mondjuk fél másodperc. ezek után minden ajax kérést ezen a pool-on keresztül irányitsunk át. a következő, és egyben utolsó lépés kliens oldalon, hogy a különböző tipusú kérésekből készítsünk egy map-et a szerver számára, ahol a kulcs a kérés tipusa és/vagy eredeti ajax célurlje, az érték pedig egy olyan lista ami az elmúlt fél másodperc alatt beesett kérések listája. annyi még, hogy természetesen ha nem érkezett új kérés az időablak alatt akkor nem kell megszólítani a szervert csak úgy megszokásból.
ezen a ponton minden fejlesztőnek éreznie kell hogy mi a következő lépés, és azt is hogy ettől miért is fog fellélegezni az alkalmazásszerver.
igen a következő lépés a szerver oldali szétágazás funkció. a kapott map alapján a korábbi funkciókat sorra hívva egy válaszokat tartozó map-et kell létrehozni, majd kiszolgálni azt. és persze hogy van még teendő kliens oldalon. a válaszok tipusa alapján ott is szét kell ágazni, és a megfelelő korábbi callback-eket sorra hívogatni.
a technika neve legyen mondjuk összevont ajax pool, használjátok egészséggel.

és ne feledjétek, ma van a programozás ünnepe :)