Как IndexedDB концептуально отличается от локального хранилища HTML5?




  1. как indexedDB, так и локальное хранилище являются хранилищами ключевых значений. Что такое
    преимущество наличия двух хранилищ ключей / значений?

  2. indexedDB является асинхронным, но соединяет (наиболее трудоемкая вещь)
    являются ручными. Они выполняются в том же потоке, что асинхронные вызовы
    были сделаны. Как это не заблокирует пользовательский интерфейс?

  3. индексированные базы данных позволяет более большой магазин. Почему бы не увеличить размер
    Магазин HTML5?

  4. я чешу голову. Что такое точка indexedDB?

544   3  

3 ответов:

IndexedDB не является хранилищем значений ключей так же, как локальное хранилище. Локальное хранилище просто хранит строки, поэтому для размещения объекта в локальном хранилище обычным подходом является JSON.преобразовать в строки это:

myObject = {a: 1, b: 2, c: 3};
localStorage.setItem("uniq", JSON.stringify(myObject));

это отлично подходит для поиска объекта с ключом uniq, но единственный способ получить свойства myObject обратно из локального хранилища-это JSON.разобрать объект и изучить его:

var myStorageObject = JSON.parse(localStorage.getItem("uniq"));
window.alert(myStorageObject.b);

это нормально, если у вас есть только один или несколько объекты в локальном хранилище. Но представьте, что у вас есть тысяча объектов, все из которых имеют свойство b, а вы хотите сделать что-то только с теми, где b==2. С локальным хранилищем вам придется перебирать весь магазин и проверять b на каждом элементе, который является много впустую обработки.

С IndexedDB вы можете хранить вещи, отличные от строк в значении: "это включает в себя простые типы, такие как DOMString и дата, а также объект и массив экземпляры.- Не только это, но и ты можешь создать индексы о свойствах объектов, сохраненных в значении. Таким образом, с IndexedDb вы можете поместить в него те же самые тысячи объектов, но создать индекс на b свойство и использовать его, чтобы просто получить объекты, где b==2 без накладных расходов на сканирование каждого объекта в хранилище.

по крайней мере, это идея. API IndexedDB не очень интуитивно понятен.

они, кажется, работают в тот же поток, что и асинхронные вызовы были сделаны. Как это не заблокирует пользовательский интерфейс?

асинхронность-это не то же самое, что многопоточность,JavaScript, как правило, не является многопоточным. Любая тяжелая обработка, которую вы делаете в JS, заблокирует пользовательский интерфейс, если вы хотите свести к минимуму блокировку пользовательского интерфейса try Веб-Работников.

индексированные базы данных позволяет более большой магазин. Почему бы не увеличить размер магазина HTML5?

потому что, без надлежащей индексации он будет становиться все медленнее, чем больше он становится.

добавляя к anwser robertc, indexedDB знает "диапазоны", поэтому вы можете искать и извлекать все записи, которые начинаются с " ab "и заканчиваются abd", чтобы найти " abc " и т. д.

я наткнулся на эту хорошую статью, обсуждающую localstorage vs indexeddb и другие возможные варианты.

(все приведенные ниже значения указаны в миллисекундах)

https://nolanlawson.com/2015/09/29/indexeddb-websql-localstorage-what-blocks-the-dom/

memory comparison

подводя итог из статьи (полностью взглядов автора),

  1. во всех трех Chrome, Firefox и Edge, LocalStorage полностью блокирует DOM во время записи данных 2. Блокировка намного более заметна, чем с памятью, так как браузер должен фактически сбросить на диск.
  2. неудивительно, что, поскольку любой синхронный код блокируется, операции в памяти также блокируются. DOM блокируется во время длительных вставок, но если вы не имеете дело с большим количеством данных, вы вряд ли заметите, потому что операции в памяти очень быстры.
  3. Как в Firefox, так и в Chrome, IndexedDB медленнее, чем LocalStorage для основных вставок ключ-значение, и он по-прежнему блокирует DOM. В Chrome он также медленнее, чем WebSQL, который блокирует DOM, но не так сильно. Только в Edge и Safari IndexedDB удается работать в фоновом режиме, не прерывая пользовательский интерфейс, и, что еще хуже, это два браузера, которые только частично реализуют спецификацию IndexedDB.

  4. IndexedDB отлично работает в веб-работнике, где он работает примерно с той же скоростью но без блокировки DOM. Единственным исключением является Safari, который не поддерживает IndexedDB внутри рабочего, но все же он не блокирует пользовательский интерфейс.

  5. localmemory идеально подходит, если данные просты и минимальны

Comments

    Ничего не найдено.