Pull to refresh

За пределами HTML5: API к базам данных и путь к IndexedDB

Reading time 4 min
Views 6.5K
Original author: Arun Ranganathan
IndexedDB – развивающийся веб-стандарт для хранения значительных объемов структурированных данных в браузере и осуществления высокопроизводительного поиска по данным с помощью индексирования. Mozilla внесла значительный технический вклад в эту спецификацию, и мы планируем реализовать её в Firefox 4 (поддерживается в FF RC4 — прим. пер.). Мы общались с известными веб-разработчиками на предмет внедрения элегантного API для хранения структурированных данных в веб. Safari, Chrome и Opera поддерживают технологию Web SQL Database, использующую SQL-запросы, которые передаются строковыми аргументами в JavaScript API; нам же кажется, что эстетическая составляющая разработки тоже заслуживает внимания, а подобное решение является не очень элегантным для клиентских веб-приложений. Мы донесли мнение разработчиков до редактора спецификации IndexedDB, и пообщались с Microsoft, которая отметила, что IndexedDB была бы не плохим решением для веба. С маячащими на горизонте реализациями от команды Chrome, нам кажется необходимым объяснить наш выбор архитектуры и то, почему нам кажется, что IndexedDB является лучшим решением для веб нежели Web SQL Database.


Веб-приложения уже могут использовать преимущества localStorage и sessionStorage, поддерживаемые IE 8+, Safari 4+, Chrome 4+, Opera 10.5 и Firefox 2+, для хранения пар ключ-значение с помощью простого интерфейса JavaScript. Стандарт Web Storage (включающий в себя localStorage и sessionStorage), уже реализован и очень хорош для хранения небольших объемов данных, но плох для хранения больших объемов структурированных данных. Хотя многие базы данных на стороне сервера и используют SQL для работы со структурированными данными, его использование на клиенте в API JavaScript вызывает сомнения.

SQL? Который SQL?


Большинство веб-разработчиков знакомы с SQL, т.к. им приходится работать как с клиентской (JavaScript, CSS, разметкой и т.д.), так и с серверной частью (например, PHP и манипуляциями с базой данных). Однако, несмотря на повсеместное использование SQL, нет единого стандарта, определяющего технологии SQL. Конкретно SQLite, на котором основан WebDatabase API, поддерживает большую часть SQL-92, но с заметными пропусками. Но SQLite – это не спецификация, это готовая к запуску технология! И единственный документ, из которого можно понять какую часть SQL поддерживает SQLite — это руководство SQLite. Чтобы сделать Web SQL Database правильно, необходимо начать с определения того, какая часть SQL важна для веб-разработки. Зачем тащить целиком другой язык, если и так существуют более элегантные способы в JavaScript?

Преимущества и ловушки в SQLite


SQLite кажется нам очень полезной технологией для приложений, и мы сделали её доступной для расширений Firefox и доверенного кода. Но мы не думаем, что правильно распространять этот API на весь веб-контент, не в последнюю очередь потому, что отсутствует четкий, широко применимый стандарт, описывающий необходимое подмножество SQL. К тому же, мы не хотим, чтобы изменения в SQLite влияли на веб в будущем, и считаем неблагоразумной стыковку большинства браузеров с SQLite. IndexedDB лишена данной проблемы; и даже если мы реализуем IndexedDB на технологиях SQLite, разработчики будут изолированы от изменений в SQLite, т.к. используемый интерфейс не будет основан на синтаксисе SQLite.

Эстетика и веб-разработчики


В прошлом году (2009 — прим. пер.) мы в Mozilla провели саммит по обсуждению хранения в вебе. Мы попросили веб-разработчиков рассказать нам каким бы они хотели видеть интерфейс хранилища структурированных данных для веба. Многие заявили, что поддерживают API SQLite, т.к. они провели эксперименты с Web SQL Database в нескольких браузерах, а что-либо работающее, лучше чем просто набор идей. Тем не менее, все выразили энтузиазм на тему того, что неплохо бы иметь лучший архитектурный выбор и как более простая модель облегчила бы им жизнь. После мы наблюдали как разработчики описали простейший интерфейс для B-дерева, который бы, как они утверждали, полностью бы удовлетворил потребности их приложений; это и заставило нас подумать над другими схемами. Нам стало понятно, что в использование строк, описывающих SQL-команды, мало элегантности «родного» JavaScript, и начали искать альтернативы. Совместно с Microsoft мы направили предложения по IndexedDB и были вовлечены в процесс стандартизации в качестве активных участников.

В другой статье, мы сравнили IndexedDB с Web SQL Database, и продемонстрировали, что первая обладает большей семантической простотой. IndexedDB дает возможность сторонним библиотекам на JavaScript не обращать внимания на базовые примитивы используя интерфейс би-дерева, и мы с надеждой наблюдаем за проектами вроде BrowserCouch, построенными на основе IndexedDB. Самые отважные веб-разработчики, используя IndexedDB, могут даже построить интерфейс для SQL. Было неверным сначала создавать API, основанный на SQL для работы в браузере, но такие интерфейсы могут быть хорошо реализованы на основе IndexedDB.



От переводчика:
Передо мной встали (еще не в полный рост, но это вопрос времени) две задачи: снизить количество клиентских запросов к серверу и использовать компетенции веб-разработки в построении десктопных приложений, которым не нужно постоянно подключение, а лишь эпизодическая синхронизация.
Начав поиск технологий, которые могли бы помочь мне в решении данных вопросов, я наткнулся на термины IndexedDB и Web SQL Database. Тут-то мне и стало интересно: почему Mozilla пошла своим путем?
Т.к. я в самом начале поиска решения, думаю, это только первая статья из цикла, как переводов, так и авторских, в которых будут описываться эти технологии и их сравнение.
Надеюсь на развернутые комментарии, которые смогут направить меня на нужный путь, а я отплачу описанием решений и их сравнением.
Tags:
Hubs:
+11
Comments 3
Comments Comments 3

Articles