Подтвердить что ты не робот

Библиотека JavaScript для Bridge IndexedDB и WebSQL

Мне любопытно, есть ли библиотека или проект там, чтобы обеспечить общий интерфейс для IndexedDB или WebSQL, в зависимости от поддержки браузера пользователя. Если они используют Chrome/Safari, используйте WebSQL, если они используют Firefox или Internet Explorer, используйте IndexedDB.

Плакат этот вопрос, похоже, сделал домашнее решение, но не предоставил никакого исходного кода.

4b9b3361

Ответ 1

Возможно, вы захотите пойти с Lawnchair, который довольно хорошо известен, как упоминал Гвидо Тапиа в вопросе, который вы связываете к.

Либо это, либо используйте его picnet.data.DataManager решение.

Также посмотрите persistence.js.

Ответ 2

JasonCasden поделился огромным списком библиотек/оберток в своей презентации В браузере и мне. Вот список:

lawnchair
persistence.js
persistJS
amplify.store
localStorageDB
https://github.com/axemclion/IndexedDB
realStorage
YUI3 CacheOffline
dojox.storage
DomSQL
Impel
ActiveJS ActiveRecord
JazzRecord
picnet.data.DataManager
ShinyCar
lscache
Kizzy
Artemia
microcache.js
Store.js

Ответ 3

Я написал YDN-DB для конкретной цели. Это оболочка базы данных для IndexedDB, WebSql и localStorage, построенная на вершине библиотеки закрытия.

Цель

Красивый API для безопасного надежного высокопроизводительного крупномасштабного веб-приложения.

Функции

  • Поддержка индексированных DB, Web SQL и механизмов хранения локальных хранилищ.
  • Хорошо протестированный модуль библиотеки закрытия.
  • Поддержка миграции версий, шифрование, query и transaction.
  • Каждый вызов метода представляет собой атомную транзакцию. Все методы асинхронны.
  • Следуйте обычным методам javascript, таким как: одиночное пространство имен, глобальное отсутствие ошибок, если вы не сказали об этом в doc), нет eval, параметризованный запрос, вот это ошибка ошибки кодирования.
  • Доступен плагин JQuery (см. раздел загрузки).

Основное использование

Импортируйте последний сокращенный JS script (см. раздел загрузки) в ваши HTML файлы. Это создаст единый объект в глобальной области, вызовите ydn.db.Storage.

var db = new ydn.db.Storage('db name');

db.setItem('x', 'some value')

db.getItem('x').success(function(value) {
  console.log('x = ' + value);
}

Query

Вычислить среднее значение с помощью запроса

q = db.query('customer').average('age');
avg = q.fetch()

Запрос ключа

q = db.query('customer', 'age').bound(18, 25, true).where('sex', '=', 'FEMALE').select('full_name')
young_girl_names = q.fetch()

Транзакция

p1 = db.key('player', 1);
db.transaction(function() {
   p1.get().success(function(p1_obj) {
        p1_obj.health += 10;
        p1.put(p123_obj);
   });
}, [p1]);

Шифрование

Данные строкового значения могут быть дополнительно зашифрованы с использованием шифрования SHA-1.

db = new ydn.db.Store('store name')
db.setSecret(passphase); // generally send from server side upon login
db.setItem(key, value, 3600*1000); // data expire on one hour
db.getItem(key); // data will be decrypted using the provided passphase

Ответ 4

Взгляните на это: https://github.com/axemclion/IndexedDBShim

Это a polyfill, чтобы включить IndexedDB с помощью WebSql. Я использую его, и я думаю, что это неплохо, но как любое решение, оно имеет некоторые ограничения, хотя вы можете развить его практически независимо от того, что хотите, без больших проблем.

Ответ 5

Ответ на вопрос, я просто хочу поделиться обновлениями.

В мае 2012 года была выпущена JayData, которая является единой библиотекой доступа к данным для JavaScript и помогает управлять данными в IndexedDB, WebSQL, SQLite, MongoDB, HTML5 localStorage и Facebook, OData, WebAPI, сервисы данных YQL с тем же синтаксисом запроса JavaScript Language.

Переход на IndexedDB из WebSQL означает только изменение типа поставщика хранилища:

var todoDB = new TodoDatabase({ 
    provider: 'webSql', databaseName: 'MyTodoDatabase' });

var todoDB = new TodoDatabase({ 
    provider: 'indexedDB', databaseName: 'MyTodoDatabase' });

Если вы не указали провайдера, библиотека обнаруживает доступную память браузера/устройства в следующем порядке приоритета (WebSQL, IndexedDB, HTML5 localStorage).

Отказ от ответственности: я являюсь членом группы разработчиков проекта JayData с открытым исходным кодом

Ответ 6

Я надеюсь, что вы (OP) довольны решениями, предложенными в ответе, который вы приняли.

Для тех, кто все еще находится на охоте за способным решением (группа, которая может включать или не включать OP), проверьте BakedGoods.

Это библиотека, которая устанавливает единый интерфейс, который может использоваться для проведения операций хранения во всех родных и некоторых нелокальных хранилищах клиентов. Он также поддерживает гибкость и возможности, предоставляемые каждому пользователю.

При этом проводя операции хранения в зависимости от того, какой тип базы данных поддерживается, является вопросом...

... с указанием соответствующих параметров операции и эквивалентных конфигураций для обоих типов баз данных:

//If the operation is a set(), and the referenced structures 
//don't exist, they will be created automatically.

var webSQLOptionsObj = {
    databaseName: "Example_DB",
    databaseDisplayName: "Example DB",
    databaseVersion: "",
    estimatedDatabaseSize: 1024 * 1024,
    tableData: {
        name: "Main",
        keyColumnName: "lastName",
        columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)"
    }, 
    tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"]
};

var indexedDBOptionsObj = {
    databaseName: "Example_DB",
    databaseVersion: 1,
    objectStoreData: {
        name: "Main",
        keyPath: lastName,
        autoIncrement: false
    },
    objectStoreIndexDataArray: [
        {name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false}
    ],
};

var optionsObj = {
    conductDisjointly: false, 
    webSQL: webSQLOptionsObj, 
    indexedDB: indexedDBOptionsObj
};

... и проводя операцию:

bakedGoods.set({
    data: [
        {value: {lastName: "Obama", firstName: "Barack"}}, 
        {value: {lastName: "Biden", firstName: "Joe"}}
    ],
    storageTypes: ["indexedDB", "webSQL"],
    options: optionsObj,
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

Его простой интерфейс и непревзойденная поддержка хранилища оплачиваются из-за отсутствия поддержки для некоторых конфигураций, связанных с хранилищем. Например, он не поддерживает проведение операций хранения в таблицах WebSQL с использованием нескольких столбцов первичных ключей.

Итак, если вы сильно используете те типы функций, вы можете захотеть посмотреть в другом месте.

О, и для полной прозрачности, BakedGoods поддерживается вашим действительно:).