Статьи

Создание веб-страниц с локальным хранилищем

Хранение — когда вы строите или ремонтируете дом, хранение — это то, что вам нужно. Чем больше, тем лучше. Этот же принцип применим к созданию веб-сайтов; Вам нужно где-то хранить данные.

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

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

В чем разница между сессией и локальным хранилищем?

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

Кто что поддерживает?

В настоящее время основные браузеры изначально поддерживают веб-хранилище. Вот они:

  • IE8 +
  • FireFox 3.6+
  • Опера 10.5+
  • Chrome 5+
  • Safari 4+
  • iOS 3.2+
  • Android 2.1+

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

Где хранятся данные?

Разве Интернет не был бы прекрасным местом, если бы все было так же? Веб-хранилище хранится в разных местах на диске в зависимости от того, какой браузер вы используете. Я не смог найти точное местоположение для всех браузеров, поэтому, если вы прочитали это и знаете, пожалуйста, напишите комментарий, сообщающий нам, где он хранится.

IE8 +%userprofiles%/Local Settings/Application Data/Microsoft/Internet Explorer/DOMStore Там есть XML-файл, который содержит данные

Firefox — данные хранятся в файле webappsstore.sqlite в папке профиля. Есть несколько дополнений Firefox, которые вы можете скачать, чтобы просмотреть их содержимое.

Хром
Windows XP — C:Documents and Settings%username%Local SettingsApplication DataGoogleChromeUser DataDefault
Vista / 7 — C:Users%username%AppDataLocalGoogleChromeUser DataDefault
Safari — данные хранятся в файле sqllite в C:Users%username%AppDataLocalApple ComputerSafariLocalStorage Там есть файл localalstorage, который называется так же, как и веб-сайт, на котором он хранится.

Веб-хранилище и JavaScript

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

Доступ к веб-хранилищу осуществляется через объект localStorage . Это возвращает интерфейс хранилища. Этот интерфейс имеет ряд функций, доступных для управления веб-хранилищем. Данные в веб-хранилище хранятся в парах ключ / значение, поэтому вы можете хранить строки, но, скорее всего, вы захотите сохранить объект JSON . В отличие от интерфейса sessionStorage , localStorage сохраняет данные, когда пользователь закрывает браузер или когда они открывают несколько вкладок или окон.

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

Начиная с самого начала, проверьте, доступен ли localStorage.

 if (Modernizr.localstorage) {    
    $("#result").text('localStorage is available');
} else {    
    $("#result").text('localStorage is not available');   
}

Пример кода можно найти здесь .

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

 
if (Modernizr.localstorage) {    
    var localStore = window.localStorage;
    localStore.setItem["Country"] = "USA";
    localStore["Country"] = "USA";
    localStore.Country = "USA";   
    $("#result").text(localStore.Country);
} else {    
    $("#result").text('localStorage is not available');   
}

Пример кода можно найти здесь .

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

 
if (Modernizr.localstorage) {
    var localStore = window.localStorage;
    if (localStore.remainingSpace > 0) {
        // you have space to do work
    }
} else {
    $("#result").text('localStorage is not available');
}

Пример кода можно найти здесь .

Обновить

Я забыл упомянуть об этом, так что вот обновление. Функция remaingSpace доступна в IE. IE
Команда представила этот метод в W3C, но пока он не вошел в спецификацию.
Лучший способ проверить, можете ли вы добавить часть данных, — это добавить попытку / зацепку вокруг части
код, который устанавливает хранилище. Как и ожидалось, каждый браузер выдает разные ошибки. Вот код, который я
используется для заполнения локального хранилища.

 
if (Modernizr.localstorage) {
var localStore = window.localStorage;
localStore.RandomData = "Random";

for (i = 0; i 

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

Firefox 7.0.1

NS_ERROR_DOM_QUOTA_REACHED — достигнут максимальный размер постоянного хранилища

IE9

Ошибка — недостаточно памяти

Safari 5.1.1

QUOTA_EXCEEDED_ERR — QUOTA_EXCEEDED_ERR: исключение DOM

Хром 15.0.874

QUOTA_EXCEEDED_ERR — QUOTA_EXCEEDED_ERR: исключение DOM

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

Удаление данных из localStorage тоже легко. Вызов removeItem удаляет элемент из хранилища.

 if (Modernizr.localstorage) {
    var localStore = window.localStorage;
    localStore.Country = 'USA';

    if (localStore.Country) {
        localStore.removeItem("Country");
    }
} else {
    $("#result").text('localStorage is not available');
}

Пример кода можно найти здесь .

Чтение данных из хранилища может быть сделано через синтаксис массива или с помощью свойства.

 if (Modernizr.localstorage) {
    var localStore = window.localStorage;
    localStore.Country = "USA";

    if (localStore.Country) {
        $("#result").text(localStore.Country);
    }
} else {
    $("#result").text('localStorage is not available');
}

Пример кода можно найти здесь .

Собираем все вместе

Веб-хранилище отлично, если браузер его поддерживает. Для старых браузеров они не будут поддерживать веб-хранилище, но будут поддерживать файлы cookie. Хороший запасной вариант — хранить данные внутри куки, если веб-хранилище недоступно. Следующий пример делает именно это.

 $(function() {
    $("#write").bind("click", function() {
        if (Modernizr.localstorage) {
            // your browser supports localStorage
            var localStore = window.localStorage;
            localStore.Country = "USA";
        } else {
            // your browser doesn't supports localStorage
            // write to a cookie
            var exdate = new Date();
            exdate.setDate(exdate.getDate() + 365);
            var cookie = "USA" + "; expires=" + exdate.toUTCString();
            document.cookie = "Country=" + cookie;
        }
    });
    $("#read").bind("click", function() {
        $("#result").text("");
        if (Modernizr.localstorage) {
            // your browser supports localStorage
            var localStore = window.localStorage;
            $("#result").text(localStore.Country);
        } else {
            // your browser doesn't supports localStorage
            // write to a cookie
            var cookies = document.cookie.split(";");
            for (i = 0; i 

Пример кода можно найти здесь .

Веб-хранилище — отличное дополнение к вашей броне, когда вам нужно создать отличный веб-сайт. Хранение данных на клиенте уменьшает объем памяти, который необходим серверу, а также приближает данные к пользователю, что повышает производительность. Насколько лучше, все зависит от того, сколько данных вы храните. Но правило здравого смысла применяется; не храните огромное количество данных в веб-хранилище. Делайте вещи максимально легкими. Ваши пользователи будут благодарны вам в конце.