stocare locală, webreference

stocare locală permanentă este un domeniu în care aplicațiile client au avantaje față de server. Pentru aplicații, cum ar fi sistemul de operare, acesta oferă un strat de abstractizare pentru a stoca și prelua date, cum ar fi setările sau starea de performanță. Aceste valori pot fi stocate în registru, INI-fișiere, XML fișiere sau în altă parte, în funcție de platforma de principii. În cazul în care clientul are nevoie de un magazin local mai mult decat o pereche de chei / valoare, aveți posibilitatea să inserați propria bază de date pentru a veni cu formatul de fișier, sau orice număr de alte decizii.

Punct de vedere istoric, aplicatie web nu a fost una dintre acele lux. Cookie-urile au fost inventate în istoria timpurie a Internetului, și pot fi folosite pentru a păstra un magazin local cantități mici de date. Dar ei au trei dezavantaje potențiale:

  • Cookie-urile sunt incluse în fiecare HTTP-cerere, încetinind astfel aplicația web prin transmiterea inutil aceleași date de peste si peste din nou;
  • Cookie-urile sunt incluse în fiecare HTTP-cererea atunci când transferul de date pe Internet în formă necriptat (dacă nu este transmis în întregime prin intermediul aplicației web SSL);
  • Cookie-urile sunt volum limitat de date de aproximativ 4 Kb - suficient pentru a încetini cererea dumneavoastră (a se vedea mai sus.), Dar nu suficient pentru a fi util.

Asta e ceea ce ne dorim cu adevarat:

  • suficient spațiu de depozitare;
  • lucru pe partea de client;
  • să ia în considerare actualizarea paginii;
  • și nici trimiterea la server.

Înainte de HTML5, toate încercările de a face acest lucru au fost eșecuri în cele din urmă diferite.

O scurtă istorie a stocării locale în HTML5

Inițial, a existat doar un singur Internet Explorer. Cel puțin, Microsoft a vrut ca lumea să cred. În acest scop, primele războaie browser-ul Microsoft a inventat cel Mare o mulțime de lucruri și de a le încorpora în browser care-completat-război dvs. - Internet Explorer. Una dintre aceste piese a fost numit DHTML Comportamente. și una din formele sale - userdata.

UserData permite o pagină web pentru a stoca până la 64 KB de date pentru fiecare domeniu într-o structură XML ca ierarhică. Domenii de încredere, cum ar fi site-urile intranet pot stoca de zece ori mai mult. Și hei, 640K ar trebui să fie suficient pentru toată lumea. IE nu a prezentat permise de dialog sub orice formă, astfel încât nu există nici o modalitate de a crește cantitatea de memorie disponibilă.

Revizuirea acestor decizii au un model: acestea sunt fie specifice unui browser sau să se bazeze pe plugin-uri terțe părți. In ciuda eforturilor eroice, ele sunt radical diferite interfețe, au diferite limitări privind depozitarea și oferă modalități diferite de a interacționa cu utilizatorul. Aceasta este o problemă care, în HTML5 pentru a fi rezolvate: pentru a oferi un API standard, care este susținută de mai multe browsere nativ fără a fi nevoie să se bazeze pe plugin-uri terțe părți.

Introducere în stocarea locală HTML5

Ceea ce am să numesc „stocare HTML5“ în caietul de sarcini mentionat ca „magazin de web“, care la un moment dat a fost o parte din caietul de sarcini HTML5, dar este apoi izolat într-un caiet de sarcini separat pentru neinteresante pentru tine motivat politic. Unii factori de browser, de asemenea, o numesc „Local Storage“ sau „DOM-pool.“ Situația este complicată de numele unora dintre nume similare ale altor standarde, care vor fi discutate mai jos.

Deci, ce este HTML5 magazin? Pur și simplu pune, este o modalitate pentru site-uri web pentru a stoca perechi cheie / valoare folosind un browser la nivel local. La fel ca cookie-uri, aceste date sunt păstrate chiar și după părăsirea site-ului, închideți fila browserului, ieșiți din browser-ul sau orice altceva. Spre deosebire de cookie-uri care datele nu sunt transmise la serverul de web de la distanță (dacă doriți să nu le trimită pe cont propriu). Spre deosebire de toate încercările anterioare de a oferi o stocare locală permanentă, această tehnologie este construit în browser-ul, astfel încât acesta este disponibil chiar și atunci când nu există nici o terță parte plug-in-uri.

Ce browsere? Ei bine, cea mai recentă versiune a browser-ului practic fiecare suportă HTML5-magazin. chiar Internet Explorer!

Verificarea pentru HTML5 magazin

În loc de auto-scris această funcție, puteți utiliza biblioteca Modernizr.

Utilizarea HTML5-stocare

Call setItem () cu numele cheii existente suprascrie în tăcere valoarea precedentă. Call getItem () cu o cheie non-existente se va întoarce NULL, și nu va provoca o excepție.

Acesta poate fi rescrisă folosind paranteze sintaxă:

Există, de asemenea, metode pentru a elimina valorile pentru numele cheie, precum și curățarea întregului magazia (de exemplu, eliminarea tuturor chei și valori simultan).

Call removeItem () cu o cheie inexistentă nu se întoarce.

În cele din urmă, există o proprietate pentru suma totală de stocare și o gamă de valori pentru a itera peste toate tastele de pe indexul (primește fiecare nume de cheie).

În cazul în care indicele cheie de apel () nu este în intervalul de la 0 la (lungime-1), atunci funcția returnează null.

Urmărirea de stocare HTML5 zona

Dacă doriți ca software-ul pentru a ține evidența modificărilor în depozit, aveți pentru a prinde stocarea evenimentului. Acest eveniment este ridicat de fereastră. când setItem (). removeItem () sau clar (), numit și ceva sa schimbat. De exemplu, dacă ați instalat sau valoarea existentă numită clară (), atunci când nu există nici o cheie, evenimentul nu funcționează, deoarece zona de depozitare nu este schimbat de fapt.

Funcția de apel invers handle_storage se numește cu un StorageEvent obiect. cu excepția Internet Explorer, în cazul în care evenimentele sunt stocate în window.event.

În acest caz, variabila e va fi obiectul StorageEvent. care are următoarele proprietăți utile.

Pagina care apelează metoda care a dus la schimbarea.

* Notă: proprietate URL-ul a fost numit inițial uri și unele browsere acceptă această proprietate înainte de a schimba caietul de sarcini. Pentru a asigura o compatibilitate maximă, trebuie să verificați dacă există proprietatea URL. și, dacă nu, verificați de proprietate în loc uri.

eveniment de stocare nu poate fi anulat în interiorul handle_storage funcția de apel invers nu este posibil pentru a opri schimbarea. Este doar modul în care browserul să-ți spun, „Hei, asta e doar ce sa întâmplat. Nu poți face nimic, am vrut doar să știi. "

Limitări în browserele actuale

Vorbind despre istoria de stocare locale, cu ajutorul unor terțe părți plug-in-uri, am menționat limitările fiecărei tehnici. Mi-am amintit că el nu a spus nimic despre limitările standard HTML5-magazin. O să-ți dau răspunsurile, și apoi explicați-le. Răspunsuri în ordinea importanței sunt după cum urmează: „5 megaocteți“, „QUOTA_EXCEEDED_ERR“ și „nu“.

„5 megaocteți“ - cât de mult spațiu de stocare este dat în mod implicit. Această valoare este surprinzător aceeași în toate browserele, deși formulate nu mai mult de o propoziție în caietul de sarcini HTML5. Noi trebuie să înțelegem că vă păstrați linia, nu și datele în formatul original. Dacă stocați o mulțime de numere întregi sau numere reale cu virgulă, diferența de prezentare poate fi mare. Fiecare cifră a numărului punctului plutitor este stocat ca un caracter, mai degrabă decât în ​​reprezentarea obișnuită pentru astfel de numere.

«QUOTA_EXCEEDED_ERR» este excepția că veți obține dacă depășiți cota de 5 MB. „Nu“ este răspunsul la următoarea întrebare evidentă este: „? Pot cere utilizatorului pentru mai mult spațiu de stocare“. La momentul scrierii în browser-ul nu este implementat nici un mecanism pentru dezvoltatorii web pentru a solicita mai mult spațiu de stocare. Unele browsere (de exemplu, Opera) permit utilizatorului să controleze cota de stocare pentru fiecare site, dar acest lucru este pur și simplu un inițiat de către utilizator, care nu are legătură cu faptul că un dezvoltator poate încorpora în aplicația web.

HTML5-magazin în acțiune

Să ne uităm la facilitatea de HTML5 de stocare în funcțiune. Referindu-ne din nou la „colțuri“ joc. am construit în capitolul despre desen. Cu acest joc o mică problemă: dacă închideți fereastra browser-ului în mijlocul jocului, ai pierdut rezultate. Dar, cu HTML5 de stocare, putem păstra procesul de joc pe site, în cadrul browser. Deschideți demonstrația, face câteva mișcări, apoi închideți fila browser-ul, și apoi re-deschide. Dacă browserul dvs. acceptă pagina demo HTML5-magazin magic își amintește poziția exactă în joc, inclusiv modul în care mai multe accidente vasculare cerebrale le-ați făcut, poziția fiecăruia dintre chips-uri de pe bord, chiar și chip selectat.

Cum funcționează? De fiecare dată când există o schimbare în joc, vom numi această funcție.

Când pagina este încărcată în loc de automate de apel funcția newGame (). care ar reveni toate variabilele din valorile inițiale, noi numim resumeGame (). Funcția resumeGame () folosind HTML5-magazin verifică starea de joc în magazin local. Dacă este, atunci se restabilește valoarea cu ajutorul obiectului localStorage.

Cea mai importantă parte a acestei funcții este un avertisment, pe care am menționat mai devreme în acest capitol, și se repetă aici: Datele sunt stocate ca siruri de caractere. Dacă stocați altceva, mai degrabă decât un șir de caractere, aveți nevoie pentru a le converti la primire. De exemplu, un steag pe care îl joacă în procesul (gGameInProgress) este un tip logic. În funcția saveGameState () am doar păstrați-l și nu vă faceți griji cu privire la tipul de date.

Dar funcția resumeGame (), trebuie să ia în considerare valoarea obținută de la magazin local, ca un șir de caractere și manual construi o valoare booleană corespunzătoare.

În mod similar, numărul de pași stocate în gMoveCount ca un întreg, în funcție de saveGameState () ne-am salva.

In afara de perechi cheie / valoare: viziune competitivă

Deși poveștile au fost o mulțime de trucuri și soluții, starea actuală a HTML5 de stocare surprinzător de bine. Noul API a fost standardizat și inclusă în toate marile browsere, platforme și dispozitive. Pentru dezvoltatori web, vedeți acest lucru în fiecare zi, nu-i așa? Dar este mai mult decât „5 megabytes de perechi cheie / valoare“, iar viitorul local de stocare permanentă este. cum să spun. Ei bine, să viziunea competitivă.

Web specificații SQL baze de date a fost implementat în patru browsere și platforme.

Suport Web SQL Database

Desigur, dacă utilizați mai mult de o bază de date în viața ta, atunci știi că «SQL» este mai mult un termen de marketing decât un standard greu și rapid (oricine se poate spune același lucru despre HTML5, dar nu contează). Desigur, există o specificație SQL reală (se numește SQL-92), dar în lume există un server de baze de date care se potrivește numai această specificație. Există Oracle SQL, Microsoft SQL, SQL la MySQL, SQL pentru PostgreSQL, SQL în SQLite. De fapt, fiecare dintre aceste produse în timp, adaugă noi funcții SQL, astfel încât nu este suficient să spunem «SQL în SQLite» chiar. Trebuie să spun «versiunea SQL, care vine cu SQLite versiunea X.Y.Z».

Toate acestea ne aduce la următoarea clauză, ballpen în prezent de top caietul de sarcini Web SQL.

Este acest context pe care am să-ți spun despre o altă viziune competitivă pentru avansate de stocare locală permanentă, pentru aplicatii web: baza de date indexată API. cunoscut anterior ca «WebSimpleDB», este acum afecțiune numită IndexedDB.

Baza de date indexată API-ul oferă ceea ce se numește obiect de stocare, cu o mulțime de idei împrumutate din baza de date SQL. Există o „bază de date“ cu „înregistrări“, fiecare înregistrare are un anumit număr de „câmpuri“. Fiecare câmp are o caracteristică a unui tip de date, care este definit la crearea bazei de date. Puteți selecta un subset de înregistrări, apoi lista-le ca „cursor“. Modificări în magazinul de obiect sunt procesate cu „tranzacție“.

Dacă v-ați programat vreodată o bază de date SQL, atunci acești termeni sunt, probabil, familiare. Principala diferență este că magazinul obiect nu este un limbaj de interogare structurată. Nu scrie o condiție ca «SELECT * de la utilizatori în cazul în care ACTIVE =«Y»». In schimb, metodele prevăzute spații de depozitare pentru deschiderea bazei de utilizatori, înregistrări de transfer, filtrarea înregistrărilor și utilizarea metodelor de acces noastre pentru a obține valoarea fiecărui câmp din înregistrările rămase. O plimbare prin timpurie a IndexedDB (trecere timpurie IndexedDB) este un bun ghid despre cum să opereze IndexedDB IndexedDB și compararea cu web SQL.

Ce se poate face cu dezvoltator web cum IndexedDB? În acest moment, practic nimic, cu excepția unor demonstrații tehnologice. Într-un an? Poate.

lecturi suplimentare

HTML5-magazin

Web SQL Database