Який ліміт зберігання для працівника сфери послуг?


77

Більшість браузерів надають localStorage обмеження на 5 МБ для домену. Чи існують такі обмеження / обмеження пам'яті стосовно працівників сфери обслуговування?

Я знаю, що веб-працівники (на яких базуються службовці) не мають таких обмежень. Але веб-працівники не зовсім використовуються для кешування ресурсів, натомість вони використовуються більше для обробки (тому центральний процесор - головна проблема там).

Якщо немає обмеження на обсяг пам’яті, чи може погано розроблений веб-сайт зламати браузер?



Отже, чи ми сподіваємось, що всі веб-сайти, які впроваджують службовців, не надто використовують кеш? Ця проблема не стосується веб-працівників, оскільки вони не призначені для кешування ресурсів.
Nachiketha

1
Я б сказав, що це обмеження пісочниці, яке визначає обсяг пам'яті та ресурсів центрального процесора та вводу-виводу, доступних для кожної сторінки на той момент. І працівники розподіляли б ці ресурси по пісочниці.
www.eugenehp.tk

1
Місце для зберігання відрізняється для різних браузерів, але, швидше за все, дотримується деяких загальних правил, як тут: developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/…
magiccrafter

1
Про це я написав кілька тижнів тому в блозі. Мені постійно задають це питання FWIW. love2dev.com/blog/ ... Відповідь полягає в тому, що вона варіюється, але більш-менш залежить від того, скільки вільного місця на пристрої. У специфікації Cache API немає нічого для контролю квоти. І зараз більшість браузерів розподіляють походження за всіма API зберігання.
Chris Love

Відповіді:


77

Оновлення 15 січня 2018 р

Інтерфейс StorageManager інтерфейсу Storage API стає стандартом для всіх API-запитів, пов’язаних із зберіганням. Як згадував @ miguel-lattuada , оціночний API надає оцінку сховища, яке використовується веб-програмою, доступним сховищем. Також зверніть увагу на виняток QuotaExceededError, який допоможе нам в обробці сценаріїв помилок.

наприклад код:

if ('storage' in navigator && 'estimate' in navigator.storage) {
  navigator.storage.estimate().then(({usage, quota}) => {
    console.log(`Using ${usage} out of ${quota} bytes.`);
  }).catch(error => {
    console.error('Loading storage estimate failed:');
    console.log(error.stack);
  });
} else {
  console.error('navigator.storage.estimate API unavailable.');
}

Для отримання додаткової інформації див. Наступні 2 чудові статті:


16 березня 2017 р. (Зберігаючи його лише для довідки / історії)

Нещодавно я натрапив на цю статтю: offline-cookbook, де вказано нижче:

Вашому походженню надається певна кількість вільного місця, щоб робити те, що він хоче. Цей вільний простір розподіляється між усіма сховищами джерел : LocalStorage, IndexedDB, Файлова система та, звичайно, кешами.

Сума, яку ви отримаєте, не вказана , вона буде відрізнятися залежно від пристрою та умов зберігання. Ви можете дізнатися, скільки ви отримали через:

navigator.storageQuota.queryInfo("temporary").then(function(info) {
   console.log(info.quota);
   // Result: <quota in bytes>
   console.log(info.usage);
   // Result: <used data in bytes>
});

Наведений вище код може працювати не у всіх браузерах . (наприклад, у chrome <48, можливо, доведеться шукати webkitPersistentStorage тощо)

Інша корисна інформація / ресурси

  1. Відповідно до офлайн-сховища для прогресивних веб-додатків Адді Османі

    У Chrome and Opera: Ваш обсяг пам’яті відповідає кожному джерелу (а не API). Обидва механізми зберігання зберігатимуть дані до досягнення квоти браузера. Додатки можуть перевірити, яку кількість квот вони використовують з API управління квотами (як описано вище).

    Firefox без обмежень, але підкаже після 50 Мб даних, що зберігаються

    Mobile Safari Макс. 50 Мб

    Desktop Safari необмежено (підказки після 5 МБ)

    IE10+ максимум на 250 Мб і запити на 10 Мб

  2. Більш детальне керівництво по роботі з квотою для мобільних браузерів від Eiji Kitamura.

Наразі це найбільш відповідні статті / рішення, знайдені для моєї проблеми. Якщо хтось знає якусь кращу статтю чи технічні характеристики, будь ласка, поділіться.


2
Спільне використання місця для зберігання між API може бути вірним лише в Chrome та Opera. Перегляньте розділ із загальними запитаннями у дописі Адді Османі: medium.com/dev-channel/…
Девід

1
@DavidScales дякую за вказівку. Просто оновив відповідь посиланнями на статті.
Nachiketha

1
NB storageQuota реалізовано лише для Chrome v55 + та Opera 42+ (що в основному є Chrome)
icc97

@ icc97 Правильно. API управління квотами все ще перебуває у статусі чернетки. Оновлено за посиланням. Дякую
Начікета

8

Явного обмеження немає. Усі сучасні браузери є багатопроцесорними або подібними, тому погано розроблена сторінка (або SW) не зробить нічого гіршого, ніж сам збій.

Зверніть увагу, що специфікація SW дуже чітко говорить про те, що браузер може вбивати та перезапускати SW у будь-який час з будь-якої причини. (Якщо DevTools відкритий на сторінці, Chrome навмисно постійно вбиває SW для цієї сторінки, щоб заохотити вас застосувати належні практики.)


9
Я вважаю, що @Nachiketha shu говорить про місце для зберігання, а не про використання енергонезалежної пам'яті.
Marco Castelluccio

1

У останньому браузері ви можете використовувати StorageManager, який є реалізацією нового стандарту для зберігання браузера, погляньте на цю статтю про mozilla.

let _storageStats = await navigator.storage.estimate();
console.log(_storageStats);
/*
  Will prompt something like this
  {quota: 15946471833, usage: 682}
  Which is a representation of quota/usage in bytes
  As you can see I get an insane quota of almost 16 GB
*/



0

Я не впевнений на 100%, але я думаю, що ви повністю обмежені тим, що доступно на клієнтській машині. Як і в, не існує фіксованої верхньої межі

Якби хтось запускав звіра з машини, а браузер був єдиною активною програмою, то у вас, швидше за все, було б достатньо місця для зберігання

Однак якщо це була стара обмежена машина, яка ледве хитається; у вас було б дуже мало

Це повністю залежить від того, що ви намагаєтеся робити насправді. Насправді ви повинні використовувати службових службовців лише для зберігання речей, важливих для роботи вашої сторінки / програми

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.