Rad s objektima u web pohrani
Kada rade s HTML5 localStorage ili sessionStorage, programeri često nailaze na probleme kada pokušavaju pohraniti JavaScript objekte. Za razliku od primitivnih tipova podataka i nizova, čini se da su objekti pretvoreni u nizove, što može dovesti do zabune i neočekivanih rezultata.
Razumijevanje kako pravilno pohraniti i dohvatiti objekte pomoću web pohrane ključno je za mnoge web aplikacije. Ovaj će vodič istražiti zašto se objekti pretvaraju u nizove i pružiti jednostavno zaobilazno rješenje kako biste osigurali da su vaši objekti ispravno pohranjeni i dohvaćeni.
Naredba | Opis |
---|---|
JSON.stringify() | Pretvara JavaScript objekt ili vrijednost u JSON niz, omogućujući pohranu u localStorage ili sessionStorage. |
localStorage.setItem() | Pohranjuje par ključ-vrijednost u objektu localStorage, dopuštajući da podaci traju kroz sesije preglednika. |
localStorage.getItem() | Dohvaća vrijednost povezanu s danim ključem iz localStorage. |
JSON.parse() | Raščlanjuje JSON niz i pretvara ga natrag u JavaScript objekt, omogućujući dohvaćanje složenih struktura podataka. |
sessionStorage.setItem() | Pohranjuje par ključ-vrijednost u objektu sessionStorage, dopuštajući podacima da traju tijekom trajanja sesije stranice. |
sessionStorage.getItem() | Dohvaća vrijednost povezanu s danim ključem iz sessionStoragea. |
Učinkovito pohranjivanje i dohvaćanje objekata u web pohrani
U JavaScriptu, localStorage i sessionStorage su objekti web pohrane koji vam omogućuju spremanje parova ključ-vrijednost u pregledniku. Međutim, ova rješenja za pohranu podržavaju samo nizove, što znači da će pokušaj izravnog pohranjivanja JavaScript objekta rezultirati pretvaranjem objekta u prikaz niza kao što je [object Object]. Za učinkovito pohranjivanje objekata morate ih pretvoriti u JSON niz pomoću JSON.stringify(). Ova metoda uzima JavaScript objekt i vraća JSON niz u koji se može pohraniti localStorage ili sessionStorage.
Da biste dohvatili pohranjeni objekt, morate pretvoriti JSON niz natrag u JavaScript objekt pomoću JSON.parse(). Ova metoda uzima JSON niz i vraća odgovarajući JavaScript objekt. Skripte navedene u gornjim primjerima pokazuju ovaj proces. Prvo se stvara objekt i pretvara u JSON niz pomoću JSON.stringify() prije pohranjivanja u localStorage korištenjem localStorage.setItem(). Da bi se dohvatio objekt, JSON niz se dohvaća iz localStorage korištenjem localStorage.getItem() a zatim raščlaniti natrag u JavaScript objekt pomoću JSON.parse().
Pohranjivanje i dohvaćanje JavaScript objekata u localStorage
Korištenje JavaScripta i JSON-a za localStorage
// Create an object
var testObject = {'one': 1, 'two': 2, 'three': 3};
// Convert the object to a JSON string and store it in localStorage
localStorage.setItem('testObject', JSON.stringify(testObject));
// Retrieve the JSON string from localStorage and convert it back to an object
var retrievedObject = JSON.parse(localStorage.getItem('testObject'));
// Verify the type and value of the retrieved object
console.log('typeof retrievedObject: ' + typeof retrievedObject);
console.log('Value of retrievedObject: ', retrievedObject);
// Output should be:
// typeof retrievedObject: object
// Value of retrievedObject: { one: 1, two: 2, three: 3 }
Pohranjivanje i dohvaćanje JavaScript objekata u sessionStorageu
Korištenje JavaScripta i JSON-a za sessionStorage
// Create an object
var testObject = {'one': 1, 'two': 2, 'three': 3};
// Convert the object to a JSON string and store it in sessionStorage
sessionStorage.setItem('testObject', JSON.stringify(testObject));
// Retrieve the JSON string from sessionStorage and convert it back to an object
var retrievedObject = JSON.parse(sessionStorage.getItem('testObject'));
// Verify the type and value of the retrieved object
console.log('typeof retrievedObject: ' + typeof retrievedObject);
console.log('Value of retrievedObject: ', retrievedObject);
// Output should be:
// typeof retrievedObject: object
// Value of retrievedObject: { one: 1, two: 2, three: 3 }
Napredne tehnike za web pohranu
Kada koristite HTML5 localStorage i sessionStorage, programeri često moraju pohraniti složenije podatke od nizova. Iako su JSON serijalizacija i deserijalizacija učinkovite za osnovne objekte, napredniji scenariji mogu zahtijevati dodatna razmatranja. Na primjer, ako radite s duboko ugniježđenim objektima ili objektima koji sadrže metode, potreban vam je sofisticiraniji pristup. Jedna uobičajena tehnika je korištenje knjižnice kao što je Flatted ili circular-json za rukovanje kružnim referencama i složenijim objektnim strukturama.
Ove biblioteke proširuju standard JSON.stringify() i JSON.parse() metode za podršku serijalizaciji i deserijalizaciji objekata s kružnim referencama, omogućujući robusnije rješenje za pohranu objekata u web pohranu. Drugo razmatranje je kompresija podataka. Za velike objekte možete koristiti biblioteke poput LZ-String komprimirati podatke prije pohranjivanja localStorage ili sessionStorage, smanjujući količinu korištenog prostora. Ovo može biti osobito korisno za aplikacije koje trebaju pohraniti značajnu količinu podataka na strani klijenta.
Uobičajena pitanja o pohranjivanju objekata u web pohranu
- Mogu li pohraniti funkcije u localStorage ili sessionStorage?
- Ne, funkcije se ne mogu pohraniti izravno u web pohranu. Kôd funkcije možete pohraniti kao niz i koristiti eval() ponovno ga izraditi, ali to se općenito ne preporučuje zbog sigurnosnih rizika.
- Kako mogu rukovati kružnim referencama u objektima?
- Koristite knjižnice poput Flatted ili circular-json koji su dizajnirani za rukovanje kružnim referencama u JavaScript objektima.
- Za što je ograničenje pohrane localStorage?
- Ograničenje pohrane za localStorage obično je oko 5 MB, ali može varirati između preglednika.
- Mogu li komprimirati podatke prije pohranjivanja?
- Da, možete koristiti knjižnice poput LZ-String za komprimiranje vaših podataka prije pohranjivanja localStorage ili sessionStorage.
- Kako mogu pohraniti niz objekata?
- Pretvorite niz u JSON niz pomoću JSON.stringify() prije nego što ga spremite u localStorage ili sessionStorage.
- Je li sigurno pohranjivati osjetljive podatke localStorage?
- Ne, nije sigurno pohranjivati osjetljive podatke localStorage budući da je dostupan putem JavaScripta i može biti ugrožen ako web mjesto bude napadnuto.
- Mogu li koristiti localStorage preko različitih domena?
- Ne, localStorage je ograničen na isto podrijetlo, što znači da mu se ne može pristupiti preko različitih domena.
- Što se događa ako korisnik izbriše podatke preglednika?
- Svi podaci pohranjeni u localStorage i sessionStorage bit će uklonjen ako korisnik izbriše podatke preglednika.
Završne misli o upravljanju pohranom objekata
Učinkovito pohranjivanje i dohvaćanje objekata u HTML5 web pohrani zahtijeva pretvaranje objekata u JSON nizove s JSON.stringify() a zatim ih raščlaniti natrag s JSON.parse(). Ova metoda osigurava da podaci ostanu netaknuti i upotrebljivi u različitim sesijama preglednika. Razumijevanjem i korištenjem ovih tehnika, programeri mogu iskoristiti localStorage i sessionStorage za složenije zadatke upravljanja podacima, poboljšavajući funkcionalnost i performanse svojih web aplikacija.