localForage — Що робити, якщо localStorage вже не вистачає?
Коли йдеться про збереження даних у браузері, localStorage часто є першим інструментом, який використовують розробники. Це проста у використанні технологія для зберігання пар ключ-значення. Проте, коли обсяг даних перевищує її можливості або з’являються складніші вимоги до роботи з даними, localStorage може виявитися недостатнім. Саме тоді на сцену виходить localForage — бібліотека, яка розширює можливості збереження даних у браузері. У цій статті ми розглянемо, що таке localForage, його переваги, особливості використання та приклади застосування.
Що таке localForage?
localForage — це JavaScript-бібліотека для роботи з веб-сховищами, яка дозволяє зберігати великі обсяги даних, у тому числі складні структури (масиви, об’єкти, файли). Бібліотека побудована поверх API браузера, таких як IndexedDB, WebSQL і localStorage, і автоматично обирає найкращий доступний механізм для збереження даних.
Основні особливості localForage:
- Підтримка великих обсягів даних: Дозволяє зберігати мегабайти інформації, що значно перевищує ліміт localStorage.
- Підтримка асинхронних операцій: Використання Promise-інтерфейсу для більш ефективної роботи з даними.
- Збереження складних типів даних: Ви можете зберігати масиви, об’єкти, зображення, файли тощо.
- Кросбраузерність: Бібліотека працює у більшості сучасних браузерів.
Чому localStorage може бути недостатнім?
1. Обмеження на розмір сховища
localStorage має обмеження у 5 МБ (у більшості браузерів). Якщо ваш додаток потребує зберігання великих обсягів даних (наприклад, файлів, зображень чи великих об’єктів), localStorage стає непридатним.
2. Синхронна робота
Операції з localStorage виконуються синхронно, що може блокувати головний потік і уповільнювати роботу додатка.
3. Підтримка лише рядкових значень
localStorage зберігає дані лише у вигляді рядків. Це означає, що складні структури, такі як об’єкти чи масиви, потрібно конвертувати у JSON перед збереженням, а потім парсити при читанні.
Приклад роботи з localStorage:
localStorage.setItem('user', JSON.stringify({ name: 'John', age: 30 }));
const user = JSON.parse(localStorage.getItem('user'));
console.log(user.name); // John
Цей підхід працює, але швидко стає незручним у великих додатках.
Переваги localForage
localForage вирішує всі основні проблеми localStorage, забезпечуючи гнучкість і потужність.
1. Асинхронність
localForage використовує асинхронні операції для запису та читання даних, що запобігає блокуванню головного потоку.
Приклад:
import localforage from 'localforage';
localforage.setItem('key', 'value')
.then(() => { return localforage.getItem('key'); })
.then((value) => { console.log(value); // 'value' })
.catch((err) => { console.error(err); });
2. Збереження складних даних
localForage підтримує об’єкти, масиви, файли та навіть зображення.
Приклад збереження об’єкта:
localforage.setItem('user', { name: 'John', age: 30 }).then(() => {
return localforage.getItem('user');
}).then((user) => {
console.log(user.name); // John
});
3. Автоматичний вибір сховища
Бібліотека автоматично обирає найкращий доступний механізм збереження, починаючи з IndexedDB і переходячи до WebSQL або localStorage, якщо це необхідно.
4. Підтримка Promise і колбеків
localForage підтримує Promise і старий підхід із колбеками, що дозволяє інтегрувати її у будь-який додаток.
Як почати використовувати localForage?
1. Встановлення
Встановіть localForage через npm або yarn:
npm install localforage
Або підключіть через CDN:
<script src="https://cdn.jsdelivr.net/npm/localforage/dist/localforage.min.js"></script>
2. Ініціалізація
localForage можна налаштувати відповідно до потреб вашого додатка:
localforage.config({
driver: localforage.INDEXEDDB, // Використовувати IndexedDB
name: 'myApp',
version: 1.0,
storeName: 'keyvaluepairs', // Ім'я сховища
description: 'Моє сховище для додатка'
});
Приклади використання localForage
Збереження файлів
const file = new Blob(['Hello, world!'], { type: 'text/plain' });
localforage.setItem('file', file).then(() => {
return localforage.getItem('file');
}).then((savedFile) => {
console.log(savedFile.size); // Розмір файлу
});
Кешування API-запитів
localForage ідеально підходить для кешування даних із серверу.
Приклад:
function fetchData(url) {
return localforage.getItem(url).then((cachedData) => {
if (cachedData) {
return cachedData;
}
return fetch(url)
.then((response) => response.json())
.then((data) => {
localforage.setItem(url, data);
return data;
});
});
}
// Використання
fetchData('https://api.example.com/data').then((data) => {
console.log(data);
});
Збереження зображень
const image = new Blob([], { type: 'image/jpeg' });
localforage.setItem('image', image).then(() => {
return localforage.getItem('image');
}).then((savedImage) => {
console.log(savedImage.type); // 'image/jpeg'
});
Поради для роботи з localForage
- Очищуйте застарілі дані:
Використовуйтеlocalforage.removeItem('key')
абоlocalforage.clear()
для очищення непотрібних даних. - Використовуйте ключі з неймінгом:
Використовуйте зрозумілі імена ключів для легшого керування даними. - Резервне сховище:
Якщо дані є критичними, подумайте про резервне копіювання на сервер.
Висновок
localForage — це потужна бібліотека, яка вирішує багато обмежень localStorage. Вона дозволяє працювати з великими обсягами даних, зберігати складні структури і уникати проблем із продуктивністю. Завдяки простоті інтеграції та підтримці сучасних API, localForage стає ідеальним вибором для сучасних веб-додатків.
Якщо ваш додаток вимагає більше, ніж може запропонувати localStorage, спробуйте localForage — і ви побачите, як значно можна покращити роботу зі збереженням даних у браузері.