Įprasti duomenų saugojimo sprendimai daugiausia apima:Cookie、Web Storage、IndexedDB、WebSQL、local Storage、session Storageir kt., pavyzdžiui:
| savybė | Slapukas | vietinė saugykla | sesijaSaugykla | indexedDB | | Duomenų gyvavimo ciklas | Paprastai sugeneruojamas serverio, galiojimo laiką galima nustatyti; Taip pat galima generuoti tokius komponentus kaip front-end priėmimas ir js-cookie | Jei neišvalyta, ji visada yra; Kai naršyklė uždaroma, ji taip pat išsaugoma vietoje, tačiau kelių naršyklių nepalaikoma | Puslapio valymas ir atnaujinimas vis tiek bus, kai puslapis bus uždarytas, o sąveika keliuose puslapiuose nepalaikoma | Jei nebuvo išvalyta, ji visada egzistavo | | Duomenų saugyklos dydis | 4K | 5 mln. | 5 mln. | Nėra dydžio apribojimų | | Bendrauti su serveriu | Jis kiekvieną kartą pateikiamas prašomoje antraštėje, o tai turi įtakos užklausos veikimui; Tuo pačiu metu, kadangi jis yra įtrauktas į užklausą, jis taip pat gali kilti saugumo problemų | Nedalyvauja | Nedalyvauja | Nedalyvauja | | ypatumas | Eilutės rakto ir reikšmės poros saugo duomenis vietoje | Eilutės rakto ir reikšmės poros saugo duomenis vietoje | Eilutės rakto ir reikšmės poros saugo duomenis vietoje | IndexedDB yra nereliacinė duomenų bazė (operacijos per SQL sakinius nepalaikomos). Jis gali saugoti didelius duomenų kiekius, teikti sąsajas užklausoms ir kurti indeksus, kurių negali pateikti kiti saugojimo sprendimai. |
Indeksuotas DB
Šiame straipsnyje daugiausia aprašomas "IndexedDB" naudojimas išorinei saugyklai ir pristatomas taip:
IndexedDB yra pagrindinė API, skirta saugoti didelius struktūrizuotų duomenų kiekius (taip pat failus / dvejetainius didelius objektus (blobs)) kliento pusėje. API naudoja indeksus, kad įgalintų didelio našumo duomenų paiešką. Nors žiniatinklio saugykla yra naudinga saugoti mažesnius duomenų kiekius, ji nėra tokia gera, kaip saugoti didesnius struktūrizuotų duomenų kiekius. IndexedDB pateikia sprendimą šiam scenarijui. Šis puslapis yra pagrindinis MDN IndexedDB vadovo puslapis - čia pateikiame išsamią API nuorodą ir naudojimo vadovą, naršyklės palaikymo informaciją ir nuorodas į kai kuriuos pagrindinių sąvokų paaiškinimus. IndexedDB turi šias funkcijas:
(1) Rakto ir reikšmės poros saugykla. IndexedDB naudoja objektų saugyklą duomenims saugoti. Visų tipų duomenys gali būti deponuojami tiesiogiai, įskaitant JavaScript objektus. Objektų saugykloje duomenys saugomi "rakto ir reikšmės porų" pavidalu, o kiekvienas duomenų įrašas turi atitinkamą pirminį raktą, kuris yra unikalus ir negali būti dubliuojamas, kitaip bus išmesta klaida.
(2) Asinchroninis. "IndexedDB" neužrakina naršyklės ir vartotojas vis tiek gali atlikti kitas operacijas, priešingai nei "LocalStorage", kuri veikia sinchroniškai. Asinchroninis dizainas neleidžia skaityti ir rašyti didelių duomenų kiekių, sulėtinant tinklalapių veikimą.
(3) Pagalbiniai reikalai. "IndexedDB" palaiko operacijas, o tai reiškia, kad jei vienas iš operacijos veiksmų nepavyks, visa operacija bus atšaukta, o duomenų bazė bus grąžinta į būseną, buvusią prieš įvykstant operacijai, ir nėra atvejo perrašyti tik dalį duomenų.
(4) Homologijos apribojimas. "IndexedDB" taikoma ta pati kilmės riba, o kiekviena duomenų bazė atitinka ją sukūrusį domeno vardą. Tinklalapiai gali pasiekti duomenų bazes tik savo domenų vardais, o ne kryžminių domenų duomenų bazėmis.
(5) Didelė saugojimo vieta. "IndexedDB" turi daug didesnę saugyklos vietą nei "LocalStorage", paprastai ne mažiau kaip 250 MB, ir viršutinės ribos nėra.
(6) Palaikykite dvejetainę saugyklą. IndexedDB gali saugoti ne tik eilutes, bet ir dvejetainius duomenis (ArrayBuffer objektus ir Blob objektus).
Jei sunku pradėti tiesiogiai su "IndexedDB" ir jums reikia jį įtraukti patiems, galite naudoti kai kuriuos supakuotus paketus taip:
- localForage: paprastas "Polyfill", pateikiantis paprastą kliento duomenų saugyklų reikšmių sintaksę. Jis naudoja "IndexedDB" fone ir grįžta į "WebSQL" arba "localStorage" naršyklėse, kurios nepalaiko "IndexedDB".
- Dexie.js: "IndexedDB" įvyniojimai leidžia greičiau kurti kodą naudojant paprastą sintaksę.
- ZangoDB: IndexedDB sąsaja, panaši į MongoDB, palaikanti daugumą MongoDB pažįstamų filtravimo, projekcijos, rūšiavimo, atnaujinimo ir agregavimo funkcijų.
- JsStore: IndexedDB apvalkalas su SQL sintaksė.
- MiniMongo: MongoDB kliento atmintyje, palaikoma vietinės saugyklos, serverio sinchronizavimas per http. MeteorJS naudoja MiniMongo.
- PouchDB: klientas, kuris įdiegia CouchDB naršyklėje naudodamas IndexedDB.
- idb: mažytė (〜1.15k) biblioteka, kurios didžioji dalis API panaši į IndexedDB, tačiau su keliais nedideliais patobulinimais, kurie labai pagerina duomenų bazės naudojimą.
- idb-keyval: Itin paprasta ir maža (~600B) pažadu pagrįsta raktų ir reikšmių porų saugykla, įdiegta su IndexedDB.
- sifrr-storage: Labai maža (~2kB) pažadu pagrįsta kliento pusės rakto-reikšmės duomenų bazė. Įdiegta remiantis "IndexedDB", "localStorage", "WebSQL" ir slapukais. Jis gali automatiškai pasirinkti aukščiau paminėtas palaikomas duomenų bazes ir naudoti jas prioriteto tvarka.
- lovefield: "Lovefield" yra reliacinė žiniatinklio programų duomenų bazė, parašyta "JavaScript", gali veikti įvairiose naršyklės aplinkose ir suteikia į SQL panašią API, kuri yra greita, saugi ir paprasta naudoti.
vietinisPašaras
localForage yra greita ir paprasta JavaScript saugykla. localForage pagerina žiniatinklio programų patirtį neprisijungus naudodama asinchroninę saugyklą (IndexedDB arba WebSQL) ir paprastą API, panašią į localStorage. localForage naudoja localStorage naršyklėse, kurios neturi IndexedDB arba WebSQL palaikymo.
"GitHub" adresas:Hipersaito prisijungimas matomas. Kinų pamoka:Hipersaito prisijungimas matomas.
localForage pateikia du skirtingus js failus, skirtumai yra šie:
localforage.js: pažadų biblioteka, kurioje yra melo įgyvendinimas (Hipersaito prisijungimas matomas.), failas yra palyginti didelis, o pažado sintaksę galima naudoti senesnėse naršyklėse.
localforage.nopromises.js: "Promise" neįdiegta, palaikomos tik naujos naršyklių versijos.
Bandymo kodas:
(Pabaiga)
|