Dec 18, 2008
AS3: SharedObject
Nu sunt fan Flex desi trebuie sa lucrez cu el destul de des.
ActionScript 3, pe de alta parte, fundament pentru Flex si Flash este cu totul alta poveste. Are momente cand ma incita foarte mult.
Recent am descoperit o bucatica de AS3 nepretuita: local SharedObject.
Cookies
Daca esti familiar cu ceva din web development stii despre cookies ca:
- expira dupa un timp; daca nu este setat explicit, la incheierea sesiunii de browser
- pot stoca un numar limitat de date: 4 kb
- se pot seta 20 de cookie-uri pe domeniu
- pot fi interceptate si detrunate deci nu pune date vitale in ele (email/parola)
- BONUS TIP (de la Yahoo Exceptional Performance): sunt trimise intre browser si client la fiecare call peste HTTP – adica mananca timp si trafic inutil de multe ori.
SharedObject
- actioneaza in stilul cookie-urilor – sunt modul in care flashplayer (din browser) poate seta date pe client.
(pentru AIR ai sandbox separat) - nu expira niciodata daca nu se seteaza explicit data de expirare
- nu se transmit niciodata catre server – se interpreteaza local de catre flashplayer.
- fiecare sharedObject stocheaza implicit cate 100kb de date – orice fel de date
- pot stoca tipuri de date native fara serializare – pui un ArrayCollection, XML, etc…, asta scoti.
- Se stocheaza intr-un folder special de pe client
- Nu se distruge la operatiunea de “clear cache” sau “clear cookies“; nu se distruge decat daca domeniul care le-a setat cere acest lucru prin AS3 sau le stergi manual din folderul in care sunt depozitate de flashplayer.
- BONUS TIP: sunt disponibile cross-browser. Date setate de un domeniu pe Firefox sunt disponibile aceluiasi domeniu pe Safari / Internet Explorer / etc…
Suna deja intersant?
Daca nu suna interesant si esti fan JavaScript adu-ti aminte ca ActionScript are clasa numita ExternalInterface. Aceasta permite expunerea publica a unor metode dintr-un SWF (AS3 compilat) catre alte limbaje (think JS).
Poti comunica prin ExternalInterface in ambele sensuri intre ActionScript si JavaScript.
Acum gandeste-te ca poti seta preferintele unui user, la fel cum ai face prin cookie, intr-un SharedObject care este cross-browser si care nu vor fi sterse data viitoare cand isi va rade cookie-urile sau cache-ul.
Din punct de vedere al usability-ului sunt mare fan al tehnologiei care imi permite sa nu imi bat la cap utilizatorul.
Daca el imi cere sa nu vada un anumit mesaj de informare tin minte asta. Daca prefera un anumit theme pentru aplicatia mea, tin minte. Daca prefera un anumit font-size / layout / refresh interval, etc… tin minte. Tin bine minte asta. Si acum si saptamana viitoare, si peste 9 luni.
Evident, nu e bullet-proof, asta in cazul in care utilizatorul isi reinstaleaza sistemul sau e vreo problema orifica la FlashPlayer. Mai bine ar fi sa il tin minte intr-o baza de date dar efortul tehnic pentru asa ceva este considerabil mai mare si oricum ma refer la setari care tin de client.
Acum suna interesant?
numarul de cookie-uri per domeniu depinde de browser.
Hell yea!
@add
Ai dreptate!
Suna a privacy risk. Cred ca e una dintre cele mai eficiente metode de a face long term identity tracking. E trivial sa pui un GUID intr-un shared object. Bine de stiut ;)
@Andrei
Privacy risk e atunci cand stochezi date sensibile in asfel de obiecte.
In orice caz: un SharedObject poate fi accesat si modificat doar de catre domeniul care l-a setat. Nu spun ca e bulletproof dar ramane la latitudinea developerului ce pune in el.
Eu vad cea mai utila implementarea in persistenta preferintelor, desi identity tracking iti permite sa pastrezi aceste date pe server. Bine de stiut ;)
[...] Ce-aţi făcut: TSK, Jama, Silvy, Mărie? Carved in Texts on December 30 2008. [...]