Lokális böngésző tárolók: Local Storage, Session Storage, IndexedDB, Web SQL, Cookies.
Local Storage, Session Storage és cookies
Az internetes kapcsolat gyakran szakadozhat, vagy akár tartósan meg is szűnhet, éppen ezért szükségszerű a webes alkalmazásokat úgy kell implementálni, hogy offline módon is megbízhatóan működjenek, ezáltal növelve a felhasználói élményt. Tegyük fel azt az esetet, amikor kitöltünk egy kérdőívet és az adatok véglegesítése előtt megszakad az internetes kapcsolat. Jó esetben az alkalmazásunk kiírja, hogy a kapcsolat megszakadt, rossz esetben pedig erről nem kapunk értesítést és kárba is veszik az eddig befektetett munkánk (nem mentődik el az adat a központi adatbázisba). Ebből az okból kifolyólag merült fel a lokális tároló koncepciója. Manapság a böngészők többsége számos beépített lokális tárolóval rendelkezik, ezek közül a leggyakrabban használtak a következőek:
Local Storage
Session Storage
Cookies
IndexedDB
Web SQL
Mivel minden böngésző rendelkezik saját (elszeparált) lokális tárolókon, a tárolni kívánt információ kizárólag a kiválasztott böngészőben lesz elérhető, a többiben nem. Ezen felül az egyes számítógépek között se lesz megosztva az adatunk (mivel az információ lokális marad). Attól függően, hogy mit szeretnénk művelni a tárolt adatainkkal, tudunk új adatokat létrehozni, a meglévőeket módosítani és törölni. Elérkezett az ideje annak, hogy bemutassuk és összehasonlítsuk az egyes lokális tárolókat. A Local storage és a session storage működésük szempontjából rendkívül hasonlóan működnek, néhány tulajdonságot kivéve. Szemben a cookie-val, melynek szerepe teljesen eltér az előbb említett két tárolótól. Tárkapacitás szempontjából amíg a Local storage körübelül 10 mb-nyi és session storage küörübelül 5 mb-nyi adatot képes tárolni, addig a cookie jóval kisebb adat tárolására lett kitalálva (körübelül 4 kb). A cookie lokális tároló jóval hamarabb jelent meg, támogatottsága nem korlátozódik a HTML5-re, szerencsénkre azon böngészőkön is elérhetőek, amik támogatják a HTML4-et. A másik két lokális tároló támogatottsága kizárólag a HTML5 szabványra korlátozódik. Folytassuk az összehasonlítást egy böngészőn, hogy melyik lokális tároló miképp viselkedik, amennyiben új lapokat kezdünk el megnyitogatni. Vegyük példának a Google Chrome böngészőt. Cookie esetén a benne tárolt adat minden egyes megnyitott lapon elérhető lesz, ugyanazt a weboldalt megnyitva. Session storage esetén a benne tárolt adat csakis azon a lapon lesz elérhető, melyen jelenleg tartózkodunk, hiába keressük fel ugyanazt a weboldalt egy másik lapon. Folytassuk az összehasonlítást az adatok megőrzése tekintetében. Session storage esetén amint bezárunk a böngészőben egy olyan lapot ahol tároltunk egy hozzá tartozó adatot, az automatikusan törlődik. Local storage esetén függetlenül attól, hogy mely lapokat zárjuk be / nyitjuk meg, a weboldalhoz tartozó adatunk egészen addig megmarad, míg manuálisan ki nem töröljük. Cookie esetén mi magunk manuálisan beállíthatjuk lejárati időt. Amint ez az idő lejár automatikusan érvényteleníti magát, jobb esetben törlődik is. Folytassuk az összehasonlítást az adatok tárolásának tekintetében. Eddig úgy beszéltünk a lokális tárolókról, mintha kizárólag a kliens oldallal szinkronizálható. Ez nem teljesen igaz. Terjesszük ki az érvényességi hatókört a szerver oldalra. Az derül ki, hogy amíg a Local storage-nak és a Session storage-nak nincs szerepe a szerver oldalon szemben a Cookie-val, melynek talán az egyik legfontosabb tulajdonsága éppen az, hogy a szerver és a kliens oldal közti adatcserét ebben a formában ellássa. A kapacitása ebből az okból kifolyólag limitált. A lenti táblázatban összehasonlítottuk támogatottság
, tárolás módja
, kapacitás
, elérhetőség
, érvényesség
és kéréssel el lehet küldeni
szempontok szerint:
Local storage | Session storage | Cookies |
---|---|---|
HTML5 | HTML5 | HTML4/HTML5 |
böngésző | böngésző | böngésző vagy szerver |
10mb | 5mb | 4kb |
bármelyik ablak | ugyanazon lap | bármelyik ablak |
végtelen | a lap bezárásáig | manuálisan beállítható |
nem | nem | igen |
Ennyit az elméletről, következzen a gyakorlat. Kezdésnek definiáljunk néhány változót a Local storage-ban. Ahhoz, hogy elérhessük ezt a funkciót, meg kell hívni a window
globális objektum localStorage
tulajdonságát. Ez a lokális tároló számos tulajdonsággal és metódussal rendelkezik, melyek közül leggyakrabban használtak az alábbiak: getItem
, keyremoveItem
, setItem
, clear
. Ahhoz, hogy elmentsünk valamilyen adatot lokálisan, a setItem
metódusát kell meghívni, mely két sztring-típusú paraméterrel rendelkezik: key
és value
. Ahhoz, hogy lekérjünk egy létező adatot a kulcs azonosítója alapján (melyhez a kívánt adat van társítva), a getItem
metódust kell meghívni, mely egyetlen sztring-típusú paraméterrel rendelkezik: key
. Amennyiben a hivatkozott kulcs nem létezik, egy null
értékkel tér vissza. Ahhoz, hogy törölhessünk egy kívánt kulcs-érték párost, a removeItem
nevezetű metódus áll a rendelkezésünkre, mely egyetlen sztring-típusú paraméterrel rendelkezik: key
. Néhány konkrét példa keretén belül figyeljük meg, hogy pontosan mi történik.
// nev elmentése
window.localStorage.setItem('nev','Zoltan');
// nev kiolvasása
console.log(window.localStorage.getItem('nev'));
// Zoltan
// nev törlése
window.localStorage.removeItem('nev'));
console.log(window.localStorage.getItem('nev'));
// null
Folytassuk a tárgyalást a Session storage-al. Kezdésnek definiáljunk néhány változót a Session storage-ban. Ahhoz, hogy elérhessük ezt a funkciót, meg kell hívni a window
globális objektum sessionStorage
tulajdonságát. Ez a lokális tároló számos tulajdonsággal és metódussal rendelkezik, melyek közül leggyakrabban használtak az alábbiak: getItem
, keyremoveItem
, setItem
, clear
. Ahhoz, hogy elmentsünk valamilyen adatot lokálisan, a setItem
metódusát kell meghívni, mely két sztring-típusú paraméterrel rendelkezik: key
és value
. Ahhoz, hogy lekérjünk egy létező adatot a kulcs azonosítója alapján (melyhez a kívánt adat van társítva), a getItem
metódust kell meghívni, mely egyetlen sztring-típusú paraméterrel rendelkezik: key
. Amennyiben a hivatkozott kulcs nem létezik, egy null
értékkel tér vissza. Ahhoz, hogy törölhessünk egy kívánt kulcs-érték párost, a removeItem
nevezetű metódus áll a rendelkezésünkre, mely egyetlen sztring-típusú paraméterrel rendelkezik: key
. Néhány konkrét példa keretén belül figyeljük meg, hogy pontosan mi történik.
// nev elmentése
window.sessionStorage.setItem('nev','Zoltán');
// nev kiolvasása
console.log(window.sessionStorage.getItem('nev'));
// Zoltán
// nev törlése
window.sessionStorage.removeItem('nev'));
console.log(window.sessionStorage.getItem('nev'));
// null
Folytassuk a tárgyalást a cookie-val. Kezdésnek definiáljunk néhány változót a Session storage-ban. Ahhoz, hogy elérhessük ezt a funkciót, meg kell hívni a document
globális objektum cookie
tulajdonságát. Ahhoz, hogy létrehozzunk egy új cookie-t egy értékadással átadhatjuk a kulcs-érték párt (mint string) egyenlőségjellel evlálasztva őket. Ez a lokális tároló számos tulajdonsággal rendelkezik (alapértelmezett értékekkel), melyek közül leggyakrabban használtak az alábbiak: Domain
, Path
, Expiration
, Size
. Minden egyes property beállítását pontos vesszővel kell leválasztani az átadni kívánt string-en belül. Ahhoz, hogy lekérjünk egy létező adatot, balszerencsénkre a console.log()
globális metódust kell meghívi. Néhány konkrét példa keretén belül figyeljük meg, hogy pontosan mi történik.
// nev és lejárat beállítása
document.cookie = `nev=Zoltán;expires=${new Date(2019,12,12).toUTCString()}`;
IndexedDB
Web SQL
Irodalomjegyzék
[1] | Vue.js core team. Vue.js: The Progressive JavaScript Framework. https://vuejs.org, Legutóbb megtekintve: 2019. április 22. |
[2] | Vue.js core team. API, Global Config, directive. https://vuex.vuejs.org/vuex.png, Legutóbb megtekintve: 2019. április 22. |
[3] | Vue.js core team. API, Global Config, computed. https://vuejs.org/v2/api/#computed, Legutóbb megtekintve: 2019. április 22. |
[4] | Vue.js core team. API, Global Config, components. https://vuejs.org/v2/api/#components, Legutóbb megtekintve: 2019. április 22. |
[5] | Vue.js core team. Vue-CLI. https://cli.vuejs.org/guide/creating-a-project.html#vue-create, Legutóbb megtekintve: 2019. április 22. |
[6] | Vue.js core team. Vue-router. https://router.vuejs.org/guide/#html, Legutóbb megtekintve: 2019. április 22. |
[7] | Vue.js core team. Render Functions and JSX. https://vuejs.org/v2/guide/render-function.html, Legutóbb megtekintve: 2019. április 22. |
[8] | w3schools core team. JavaScript RegExp Reference. https://www.w3schools.com/jsref/jsref_obj_regexp.asp, Legutóbb megtekintve: 2019. április 22. |
[9] | Google Chrome DevTools core team. Chrome DevTools. https://developers.google.com/web/tools/chrome-devtools, Legutóbb megtekintve: 2019. április 22. |
[10] | Node.js core team. Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. https://nodejs.org/en/, Legutóbb megtekintve: 2019. április 22. |
[11] | NPMJS core team. NPMJS. https://www.npmjs.com, Legutóbb megtekintve: 2019. április 22. |
[12] | ExpressJS core team. Express Fast, unopinionated, minimalist web framework for Node.js. https://expressjs.com, Legutóbb megtekintve: 2019. április 22. |
[13] | EJS core team. EJS: Embedded JavaScript templating. https://ejs.co, Legutóbb megtekintve: 2019. április 22. |
[14] | Olga Filipova. Learning Vue.js 2. Packt Publishing Ltd., Livery Place, 35 Livery Street, Birmingham, B3 2PB, UK, 3, 2016. |
[15] | E.F. Codd. A relational Model of Data for Large Shared Data Banks. Communications of the ACM, 13 (6) 1970. |
[16] | Papp Edit. Adatbáziskezelés. Booklands 2000 Könyvkiadó Kft., 5600 Békéscsaba, Dr. Becsey Oszkár u. 42., 1, 2004. |
[17] | Nemzeti Szakképzési és Felnőttképzési hivatal. Szoftverfejlesztő tanfolyam. https://www.nive.hu, Legutóbb megtekintve: 2019. április 22. |
[18] | JavaScript.info core team. JavaScript.info. https://javascript.info/promise-basics, Legutóbb megtekintve: 2019. április 22. |
[19] | Craig Buckler. Sitepoint (JavaScript) - Understanding ES6 Modules. https://www.sitepoint.com/understanding-es6-modules/, Legutóbb megtekintve: 2019. április 22. |