Ugrás a főmenüre.
Web 2009.04.23.

Egy kis gyorsítás az iWiW appokhoz

A tegnapi indulásnál számítani lehetett a nagy reccsre, be is következett, remélem senki sem csodálkozott. Az alkalmazások szinte kivétel nélkül az iWiW rendszere miatt nem működtek, ahol a kapcsolati háló adatok még csak-csak megérkeztek, de az adattárolási és a külső szerverhez fordulási kérések teljesen behaltak.

Ha külső szerverhez fordul egy alkalmazás, akkor a kérés általában keresztülmegy az iWiW rendszerén, még akkor is, ha mondjuk egy külső SWF fájlt tölt be. Ez főleg az adatforgalomnál gázos, mert a böngésző által bezárt "biztonsági doboz" miatt nem lehet direkt AJAX-os kéréseket intézni kifelé (nem megy az XMLHttpRequest, a MooTools-os se), hanem a gadgets API-n keresztül a gadgets.io.makeRequest metódust kell használni.

Ő pedig szépen keresztülmászik az iWiW-en, megkérdezi a külső szervert, aztán visszajön az eredménnyel. Az a baj vele, hogy:

  • Függ az iWiW rendszerétől, pedig külső kérésnél nem szeretném terhelni a nagy tesót.
  • Lassú még akkor is, ha gyors: felesleges http kéréseket eredményez.
  • Nem tud előre beállítható timeout-ot: olyan későn is visszatérhet, amikor már nincs szükség rá. Nekem "igazi" timeout kell, ahol az idő letelte után teljesen elfelejti a kérést és már nem is fordul a külső forráshoz, nem terheli azt.
  • Nem lehet leállítani, eldobni a kéréseket, ha azok még nem tértek vissza.

A fentieket nagyon trükkös és így böngészőnként bizonytalan sikerű JavaScript-tel (pl. dinamikus script tag) meg lehet oldani, de az igazi robusztus megoldás egy icipici Flash objektum használata.

FlashIO

FlashIO-nak neveztem el a megoldást, így működik: van egy globális FlashIO JavaScript objektum, amelynek mindössze három metódusa van: init, makeRequest és cancelRequest. Mindent megcsinál helyetted, még a szükséges (láthatatlan) Flash objektum beillesztését is, meg JSON parse-ol, satöbbi.

Az egész pakk letölthető innen, benne van a Flash objektum forrása is (pl. Bártházi doktornak tanulási célzattal, kevés kód van benne). Az én alkalmazásom (Videotelefon)  gyorsabb lett tőle, 2-400 ms (és néha 2-20 másodperc...) helyett 50-150 ms még az átlagfelhasználó számára is észrevehető.

7 hozzászólás

  1. idézem 2009.04.23. 11:47
    • duplabe
    Tegnap én is próbálkoztam pár dologgal, de a sebesség kb éjfél, egy körül volt elviselhető.

    Ez nagyon jónak tűnik. Köszönet érte, remélem összejön amit kitaláltam és akkor nagy hasznát tudom majd venni.
  2. idézem 2009.04.23. 14:30
    • _akos via Google Reader
    iwiw alkalmazás optimalizálás :)
  3. idézem 2009.04.24. 20:19
    • duplabe
    Bárhogy próbáltam életet lehelni bele, mindig gadgets.flash nem létezik lesz belőle. Nincs valami ötleted?
  4. idézem 2009.04.24. 22:14
    • duplabe
    Bocsánat, megint hamarabb kérdeztem, mint olvastam. Már rá is jöttem a megoldásra.
  5. idézem 2009.04.26. 09:01
    Ez egy elég régi technika, talán 2005-ben voltak az első ilyesmi megoldások, egy robosztusabb mgvalósítás található pl. YUI IO-ban, de létezik pl. jQuery kiegészítés is hozzá.

    Amúgy a JSONP az teljesen jól tud működni, mi is támogatjuk.

    Ha már előjött ilyesmi téma, akkor egy jópofaság a CSSHttpRequest, igaz ez nem általános, de technikailag érdekes (a CSS-re sem vonatkozik a same origin policy).

    Amit meg remélem minél hamrabb támogatni fognak a böngésző gyártók, az a JsonRequest, ami egy nagyon jó kezdeményezésnek tűnik, bár ez nem meglepő, hisz Crockford találta ki ezt is.
  6. idézem 2009.04.26. 09:03
    Bakker, a legfontosabb lemaradt: Sok Boldog Születésnapot!

    u.i.: Már megint nem sikerült elsőre az üzenet elküldése, azt mondta, hogy hozzáadva, de nem jelent meg a listában (frissítés után sem). Szerencsére nálad már minidg rutinosan vágólapra teszem a hozzászólást beküldés előtt. :)
  7. idézem 2009.04.26. 16:01
    @felho Nagyon köszönöm!

    Jópofák a kész megoldások, de a saját az igazi, abból lehet tanulni. :-) Meg MooTools-ra nem is volt.

    A hozzászólás parát nem értem, más még nem panaszkodott. Nem lehet, hogy valami evil fejlesztői környezet dolog?
Új hozzászólás
A sortörések automatikusak. Csak az üzenet kitöltése kötelező, a többi mező opcionális. A megadott e-mail címet nem tesszük közzé. Engedélyezett HTML tagek: p, a, strong, em, blockquote, ul, ol, li, dl, dt, dd.

Legutolsó hozzászólások

Végre IKEA!: Ági: Heló bárkinek, aki idetéved! A weboldalunk domain-je - a kedvenc áruházunk ügyvédjének nyumására :) - megváltozott: Az új cím: is...

DJ PLAYER Blue Edition: Gábor: Ja, és természetesen megy iPad-en is, hiszen _minden_ iOS app megy iPad-en.

DJ PLAYER Blue Edition: Gábor: Bug report-okat itt fogadunk: http://djplayer.net/page/bug_report_fixes

DJ PLAYER Blue Edition: hohand: Hello!A dj player mukodik iPad-on is?Tegnap feltettem, wifi-n athuztam ra zeneket,de amikor ranyomtam egy zeneszamra,error-t dobott es valami is!...

Uzsidoboz LED!: zo via Google Reader: vicces dolog, csak nem értem mire való

iMect means internet, media and other cool things. We're a small company located in Hungary. There is a big footer on every page where you can discover what we do and what happens with us.

Az iMect jelentése: internet, média és egyéb király dolgok. Egy kis magyar cég vagyunk. Minden oldalon van egy nagy lábléc, ahol felfedezheted, hogy mivel foglalkozunk.