В последнее время существует тенденция по переносу нагрузки с сервера на сторону клиента, то есть, собственно, на веб-браузер пользователя. Так, например, можно часть данных перенести непосредственно на компьютер пользователя. Для реализации хранения данных на стороне клиента создана новая технология HTML5 Web Storage. Однако, перед тем как познакомиться с ней давайте вспомним другую более известную технологию хранения данных – файлы cookie.

 

Cookie

Практически каждый, кто занимался разработками в области web, обязательно сталкивался с таким понятием как «cookie». В общем, это такой файл, который создается браузером на диске пользователя, который предназначен для хранения небольших данных. Например, идентификатор сессии, который может получить  сайт, чтобы отобразить пользователю корзину, в которую он уже успел положить товары при прошлом посещении сайта.

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

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

  • Ограниченный размер. Максимальный размер фала cookie составляет всего 4 Кб;
  • Безопасность. Воспользоваться вашими файлами cookie могут злоумышленники, так как они видны из сети;
  • Загрузка. Поскольку файлы cookie передаются на сервер и обратно, то соответственно, они занимают часть пропускной способности канала
  • Блокировка. Часть пользователей в целях безопасности ограничивает возможность браузеров по созданию cookie. Поэтому при отключенных cookie может

 

Web Storage

Если внимательно изучить все недостатки файлов cookie, то можно заметить, что все они в основном связаны с постоянной передачей файлов на сервер и обратно. Поэтому, видимо, для решения этой проблемы достаточно создать технологию, которая не нуждалась бы в соединении с сетью и постоянной передачей данных серверу.

Такой технологией и является HTML5 Web Storage. HTML5 предоставляет программный интерфейс, посредством которого, разработчики могут сохранять данные в легко извлекаемых javascript-объектах, постоянно существующих от одной загрузки страницы к другой. Используя хранилище сеанса или локальное хранилище, разработчики могут сами определять, должны ли данные сохраняться по отдельности для страниц, открытых в одном и том же окне (вкладке), и прекращать существование после закрытия этого окна (вкладки) или же совместно использоваться всеми окнами (вкладками) и продолжать существовать даже после перезапуска браузера.

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

  • Internet Explorer 8 и выше;
  • Firefox 3.5 и выше;
  • Opera 10.5 и выше;
  • Chrome 4 и выше;
  • Safari 4 и выше;
  • iOS 2 и выше;
  • Android 2 и выше.

Для работы с хранилищем данных используется javascript, поэтому данные не передаются когда угодно, а только тогда, когда это явно задано. Таким образом можно хранить большие объемы данных и при этом не бояться за производительность сайта.

Для реализации технологии Web Storage используются два объекта – локальное хранилище и хранилище сеанса.

 

localStorage

Локальное хранилище (представлено объектом localStorage) представляет собой базу данных, которая размещена на стороне клиента и представляет собой набор пар «ключ-значение». К преимуществам локального хранилища относят:

  • Данные хранятся на стороне клиента и не передаются на сервер (без необходимости);
  • Время хранения данных не ограничено;
  • Максимальный размер хранимых данных зависит от браузера и теоретически не ограничен.

 

sessionStorage

Главное отличие хранилища сессии от локального хранилища во времени хранения данных. Объект sessionStorage хранит данные только в течение одной пользовательской сессии. Когда браузер пользователя будет закрыт все данные будут удалены. Однако во время сервинга по страницам данные будут доступны всегда, а не только на тех страницах, на которых они были созданы.

С точки зрения программирования различие в использовании сеансового и локального типов хранилищ сводится к различию имен объектов, посредством которых осуществляется доступ к ним: sessionStorage и localStorage соответственно.

 

Сохранение и извлечение данных

Прежде чем использовать Web Storage необходимо убедиться в его поддержке текущим браузером. Для этого можно использовать следующий пример кода (в данном случае локальное хранилище):

function isLocalStorageAvailable() {
  try {
    return 'localStorage' in window && window['localStorage'] !== null;
  } catch (e) {
    return false;
  }
}

Для сохранения данных в локальном хранилище можно воспользоваться одним из способов:

localStorage.setItem('id', 'value');
localStorage['id'] = 'value';

Как видно из примера выше, данные отсылаются парами «ключ (id) – значение». Соответственно и извлечь их можно, используя эти пары:

var data = localStorage.getItem('id');
var data = localStorage['data'];

Аналогично можно удалять данные из хранилища:

localStorage.removeItem('id');

Для полной очистки хранилища существует метод clear():

localStorage.clear();

При использовании хранилища сессии используются все те же методы.

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

В этом контексте умение использовать локальное и сеансовое хранилища является одним из базовых навыков веб - разработчика. Как и с большинством элементов, предоставляемых нам HTML5, сдерживает всеобщее распространение технологии Web Storage неутвержденная специфиакация и ограниченная поддержка браузерами.