Ответ
Большинство современных браузеров предоставляет ~5 МБ (мегабайт) на один домен (протокол + домен + порт). Это ограничение может незначительно варьироваться (например, до 10 МБ в некоторых браузерах).
Практические аспекты:
- Данные хранятся только в виде строк (
key-value). Для объектов используйтеJSON.stringify()при записи иJSON.parse()при чтении. - Превышение лимита вызывает исключение
QuotaExceededError. - Объем общий для всех ключей в рамках домена.
Пример проверки доступного пространства (осторожно, очистит данные test):
function estimateLocalStorageLimit() {
const testKey = 'test';
let data = '';
// Создаем строку ~1 МБ
const oneMegabyte = 'a'.repeat(1024 * 1024);
try {
// Пытаемся записывать данные, пока не получим ошибку
while (true) {
data += oneMegabyte;
localStorage.setItem(testKey, data);
}
} catch (e) {
// Вычисляем записанный объем в МБ
const used = (data.length / (1024 * 1024)).toFixed(2);
console.log(`Примерный доступный объем: ${used} МБ`);
localStorage.removeItem(testKey); // Очистка
}
}
Важно: Для надежных приложений не стоит полагаться на максимальный лимит, а реализовать обработку ошибок при записи.
Ответ 18+ 🔞
Ну и история с этим вашим localStorage, блядь! Сидит он там, в браузере, как сука царь в своём царстве, и выдаёт тебе аж целых пять мегабайт на один домен! Ну, в некоторых браузерах до десяти может дотянуть, но это уже как повезёт, ёпта.
А теперь слушай сюда, главные подводные ебучки-воробушки, которые тебя ждут:
- Хранит он всё в виде строк, блядь! Ты ему объект суёшь, а он тебе — «пошёл нахуй, я строки люблю». Так что не ленись, оборачивай свой объект в
JSON.stringify()перед записью, а когда читаешь —JSON.parse(), чтобы обратно развернуть. Иначе получишь какую-нибудь хуйню вроде"[object Object]". - Лимит — он общий, сука! Это не пять мегабайт на ключ, а на всю твою деятельность в рамках домена. Напихаешь туда всякого хлама — и пиздец,
QuotaExceededErrorтебе в сраку. - Проверить, сколько осталось, можно, но это гемор. Вот, смотри, примерный способ, но он, блядь, очистит ключ
'test', имей в виду!
function estimateLocalStorageLimit() {
const testKey = 'test';
let data = '';
// Создаем строку ~1 МБ
const oneMegabyte = 'a'.repeat(1024 * 1024);
try {
// Пытаемся записывать данные, пока не получим ошибку
while (true) {
data += oneMegabyte;
localStorage.setItem(testKey, data);
}
} catch (e) {
// Вычисляем записанный объем в МБ
const used = (data.length / (1024 * 1024)).toFixed(2);
console.log(`Примерный доступный объем: ${used} МБ`);
localStorage.removeItem(testKey); // Очистка
}
}
А главный вывод, блядь, какой? Не рассчитывай на эти пять мегабайт как на что-то святое! Пиши свою логику так, чтобы она не охуела и не сломалась, если место кончилось. Обрабатывай ошибки записи, чисти за собой хвосты, и будет тебе счастье, а не внезапный пиздец для пользователя.