


Google Gears. Клиентские хранилища. Технологии будущего. Оптимизация структуры веб-страниц
userData behavior
Flash Local Shared Object
WHATWG DB Backend (openDatabase)
globalStorage и localStorage
Google Gears
Библиотеки для работы с клиентскими хранилищами
Резюме
Последнее, из рассматриваемых нами хранилищ — Google Gears, расширение для браузеров, придуманное Google. В настоящее время встроено в браузер Google Chrome, для других поддерживаемых браузеров скачивается и устанавливается отдельно. Диапазон поддерживаемых браузеров довольно широк: FireFox, начиная с версии 1.5, Internet Explorer 6.0 и выше, Safari 3.1.1 и выше (для Mac OS), а так же мобильные браузеры — IE Mobile с версии 4.01 и Opera Mobile 9.51 и выше.
Основная идея хранилища Google Gears та же, что и у openDatabase, тот же самый доступ к SQLite, но с несколько другим API:
function GearsStorage(name) { if (!window.google || !window.google.gears) { var factory = null;
// Firefox if (typeof GearsFactory != 'undefined') { factory = new GearsFactory(); } else { // IE try { factory = new ActiveXObject('Gears.Factory'); if (factory.getBuildInfo().indexOf('ie_mobile') != -1) { factory.privateSetGlobalObject(this); } } catch (e) { // Safari if ((typeof navigator.mimeTypes != 'undefined') && navigator.mimeTypes["application/x-googlegears"]) { factory = document.createElement("object"); factory.style.display = "none"; factory.width = 0; factory.height = 0; factory.type = "application/x-googlegears"; document.documentElement.appendChild(factory); } } if (!factory) return; if (!window.google) { google = {}; } if (!google.gears) { google.gears = {factory: factory};
}
}
this._begin = function () { this.db.execute('BEGIN').close(); } this._commit = function () { this.db. execute('COMMIT').close(); }
this.db = google.gears.factory.create('beta.database'); this.db.open(name)
this.db.execute('CREATE TABLE IF NOT EXISTS storage(k TEXT UNIQUE NOT NULL PRIMARY KEY, v TEXT NOT NULL);').close()
this.get = function (name) { this._begin() var r = this.db.execute('SELECT v FROM storage WHERE k = ? ', [name])‘ this._commit()
var result = r.isValidRow() ? r.field(0) : null; r.close(); return result; }
this.set = function (name, value) { this._begin() this.db.execute('INSERT OR REPLACE INTO storage(key, value) VALUES(?, ?) ', [name, value]).close() this._commit() }
this.del = function (name) { this._begin() this.db.execute('DELETE FROM storage WHERE key = ? ', [name]).close() this._commit() }
}
Как видно, существенную часть занимает инициализация Google Gears, в каждом браузере она выполняется по-разному. API устроено проще, чем в openDatabase — транзакции нужно создавать самостоятельно, зато есть возможность возвращать данные непосредственно, не прибегая к callback.
Авторы не обладают сведениями об ограничениях на размер этого хранилища, вполне может быть, что никаких ограничений, помимо тех, что есть в самом SQLite не существует.