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

Diszkórobbanás a 90-es években és a legendás Campari diszkó: Árpika Palotáról: Szia ZooLou :-9 Te melyik részen melóztál?

Teh early agez... (így kezdődött) 1990-1992: Tamás Hölzer: Szia Gábor! Hozzájárulsz, hogy a http://zenci-blog.blogspot.com/p/disco-story.html blogban linkeljem a diszkó "történelmed"? Üdv; tamás

Diszkórobbanás a 90-es években és a legendás Campari diszkó: ZooLou: Finucsi, PG, Függöny, Dj Tökimanó, Barbi, Kacsa, Virág, Feri, Erzsi, Jana, és még sokan a csapatból! Én is lehúztam egy kis időt ott,...

A csatlakozás az iPhone Developer Program-hoz szívás: Nyéki Zoltán: Sziasztok, Arról nincs információtok vagy tanácsotok, hogy egy magyarországi kisvállalkozásnak hogy kell regisztrálnia az Applenél, hogy...

Rólam és a blogról: Szanto Peter: Szia, en is szeretnek veled app fejlesztes ugyben beszelni:) Ha aktualis szamodra uj projekt befogadasa, akkor kerlek irj. koszi, p

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.