Главная > AJAX, Flash, ActionScript, Mozilla Firefox, web2.0, Разное > AJAX Storages — небольшое исследование на тему.

AJAX Storages — небольшое исследование на тему.

22 декабря 2007

236.pngПриветствуем наших читателей. Сегодняшний материал будет обзорным исследованием на тему хранилищ данных в приложениях AJAX. Как раз на днях озаботившись этим вопросом, я полез в свой любимый фреймворк, на котором работает наш проект (речь идёт о Dojo toolkit), и с удивлением обнаружил, что согласно документации, исходному коду и сообщениям на форуме проекта, в текущей версии 1.0 поддерживается только Google Gears. Хотя ещё ранние версии, ветки 0.4.х радовали разработчика поддержкой нескольких, порой весь экзотичных стораджей. Но обо всем по порядку.

Речь в статье идёт о некотором хранилище пользовательских данных для AJAX приложений, которое доступно для JavaScript-a и позволяло бы хранить большие объёмы информации. Вариант с cookie не подойдёт, так как там объем ограничен всего лишь 4 Кб. Хотелось бы, чтобы можно было хранить если не неограниченной длины данные, то хоть бы достаточно большой объем, в зависимости от приложения, может потребоваться от сотни килобайт до нескольких мегабайт. Кроме этого, сохранённые данные должны быть доступными и после перезапуска браузера или даже перезагрузки компьютера и длительное время, например, до принудительной очистки пользователем или скриптом. Вопросы защиты также играют роль - чтобы данные, помещённые в одном приложении, не могли быть прочитанными в другом, даже есть имена переменных совпадают.

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

Конечно, я понимаю, что все эти желания, да ещё и сразу, в одной системе вряд ли совместимы, но давайте посмотрим, что современные разработки нам могут предложить.

  1. Cookie - старые добрые cookie, хотя и не подходят почти ни по одному критерию, но все равно широко используются, в частности, для хранения небольших данных, так как идентификаторы доступа и т.д. Зато такой способ обладает кроссплатформенностью, не требует никакого дополнительного ПО и достаточно прост в использовании.
  2. HTTP-кеширование. Подсмотрел в одном из комментариев в англоязычном блоге интересное использование возможности выставлять заголовки управления кешированием - отправляем JS файл, например, с описанными данным, и браузер на время, пока согласно заголовкам, файл будет валидным в кеше, будет выдавать информацию с локальной копии, не запрашивая его снова с сервера. Метод, что и сказать, очень такой... эксклюзивный я бы сказал, хотя для определённого типа данных и приложений вполне может сгодится, тем более, что он почти не требует никаких изменений или доработок уже существующих систем.
  3. userData в MS IE. Это специальный механизм хранения данных, реализованный в Internet Explorer и доступный начиная с версии 4.0. Он позволяет хранить до 64 Кб данных на страницу и максимум до 640 Кб на домен. Конечно, реализовано это достаточно странно, объявление стораджа через стили и тег <ELEMENT>, объемы хранимых данных небольшие, но использовать для простой замены cookie вполне подойдёт, хотя кроссбраузерности здесь нет.
  4. Mozilla Firefox DOM Storages. Базируется на спецификации WHATWG DOM Storage (часть HTML 5) и позволяет хранить до 5 Мб данных на домен. Доступно в версиях браузера начиная с 2.0.0.1, хотя разработчики движка webKit обещают поддержку этого стандарта и у себя (не проверял, как с этим обстоят дела сейчас, так что буду рад комментариям). К сожалению, эта технология также не является кроссплатформенной, хотя по своим параметрам она достаточно привлекательна для большинства приложений.
  5. session store API и mozStorage API - это специализированные интерфейсы для применения в расширениях и плагинах для браузера Mozilla Firefox, причём, второй интерфейс это API для встроенного движка SQLite.
  6. Flash local Shared Object - наконец, самое универсальное решение, которое применяет скрытый Flash-файл как сторадж для хранения данных, либо можно использовать Flash cookie. Такой метод позволяет хранить до 100 Кб данных совершенно прозрачно, дальнейший объем доступный после подтверждения пользователя в настройках Flash-плеера, а такое хранилище может содержать от 10 до бесконечности объем данных (в зависимости от настроек пользователя). Сторадж кроссплатформенный и кроссбраузерный, так что может считаться лидером среди всех технологий. Тем более, что по статистике, уже у более чем 90% компьютеров, подключённых к сети Интернет, установлен Flash.
  7. GoogleGears - ещё одно решение, обладающее частичной кроссбраузерностью и кроссплатформеностью, но предоставляющие самые широкие возможности по хранению информации. Это, по сути, не только сторадж, но и целая инфраструктура, например, возможность многопоточного исполнения фрагментов кода и т.п. Сам сторадж построен на основе SQLite базы и допускает как обычную работу через API, так и через SQL запросы. Объем данных, насколько мне известно, не ограничен. Единственный недостаток, это необходимость устанавливать дополнительное ПО, хотя его объем (около 230 Кб) и известность разработчика не станут преградой.
  8. Java applets - это уже моё изобретение, по принципу работы оно аналогично тому же flash, толко использует Java апплет, ведь виртуальная Java-машина установлена на большинстве компьютеров, да и в таком случае можно задействовать всю мощь java как платформы, например, вынеся туда и некоторые ресурсоёмкие расчёты, полнотекстовый поиск или шифрование (кстати, полнотекстовый поиск реализован только в GoogleGears, поэтому если это для вас критично, выбор сильно сужается). Такое решение будет обладать снова таки ограниченной кроссплатформенностью, но в большинстве случаев это не так важно - на всех основных платформах java работает.

Как видите, вариантов, с одной стороны, достаточно много, с другой - для полноценной работы в серьёзной системе пригодны очень немногие, а поддержка со стороны популярных JavaScript фреймворков вообще отсутствует (только Dojo toolkit, и то со многими, часто критическими оговорками, о чем мы и поговорим в следующей статье). Так что, если вы задались мыслью интегрировать в своё приложение оффлайновый кеш, вам следует серьёзно подойти к выбору системы кеширования, учитывая множество факторов:

  • готовы ли вы ограничить аудиторию одним или несколькими популярными браузерами?
  • какой объем данных будет хранится?
  • какой уровень секретности/безопасности требуется?
  • какие операции, помимо стандартных set/get/delete вам необходимы?
  • необходимо ли реализовать полностью прозрачную для пользователя работу или допускаются запросы?

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

В следующем материале мы рассмотрим фреймворк Dojo toolkit как средство абстракции различных механизмов стораджа.

Ссылки по теме:

  • Ну раз уж у вас блог о «еще не реализованных технологиях» — еще планируется (и кое-где уже есть, в частности в nightly builds WebKit’а и Opera Kestrel, если мне память не изменяет) реализация клиентских БД. В стандарте HTML 5.0 (WebApps 1.0) они описаны.

    PS. Отличный блог! Редко натыкаешься случайно на такие. Пишите дальше. 😉

  • ну вроде как Mozilla Firefox DOM Storages это как раз реализация этого.

    спасибо! стараемся!

  • Нет. DOM Storages — это несколько другая вещь.
    Читаем это (как раз про DOM Storages), а потом это (именно про БД). А потом можно это (про БД и WebKit).

Developers.org.ua