12 мая 2013 г.

Работа с данными в приложениях WinJS

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

Все эти данные необходимо где-то хранить. И платформа WinJS предоставляет нам API для хранения нашей информации в различных типах хранилищ. Какие хранилища существуют в приложения Windows Store JavaScript и как ими польоваться - мы узнаем в этой статье.

Хранилище сессии

Начнем, с временного хранилища – хранилище данных, которое существует только на протяжении сессии запуска приложения (тем, кто знаком с ASP.NET это хранилище будет знакомо).

Для записи данных в это хранилище следует использовать следующий синтаксис:

   1:  var mySessionState = WinJS.Application.sessionState;
   2:  mySessionState.myKey = "myValue";

Данное хранилище будет жить до тех, пор пока приложение не будет полностью закрыто (состояние NotRunning). Если же пользователь просто свернул приложение (состояние Suspended) – данные сессии будут сериализованы на диск и восстановлены при повторном открытии приложения (Relaunch).

Локальные настройки

Данный тип хранилища содержит пары ключ-значение и постоянно хранит все данные на диске. Код для записи данных приведен ниже:

   1:  var applicationData = Windows.Storage.ApplicationData.current;
   2:  var localSettings = applicationData.localSettings;
   3:  localSettings.values["exampleSetting"] = "Hello Windows";

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

Локальное хранилище

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

   1:  var applicationData = Windows.Storage.ApplicationData.current;
   2:  var localFolder = applicationData.localFolder;
   3:   
   4:   
   5:  function writeToFile() {
   6:     localFolder.createFileAsync("dataFile.txt", Windows.Storage.CreationCollisionOption.replaceExisting)
   7:        .then(function (sampleFile) {         
   8:           return Windows.Storage.FileIO.writeTextAsync(sampleFile, "myValue");
   9:        }).done(function () { });
  10:  }
  11:   
  12:  function readFromFile() {
  13:     localFolder.getFileAsync("dataFile.txt")
  14:        .then(function (sampleFile) {
  15:           return Windows.Storage.FileIO.readTextAsync(sampleFile);
  16:        }).done(function (fileText) {
  17:           // Получено содержимое файла
  18:        }, function () {
  19:           // ошибка
  20:        });
  21:  }

Временное локальное хранилище

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

Доступ к временной папке можно получить следующим образом:

   1:  var applicationData = Windows.Storage.ApplicationData.current;
   2:  var temporaryFolder = applicationData.temporaryFolder;

Запись и чтение файлов осуществляется аналогично локальному хранилищу.

Роуминг

Это несомненно, самый интересный вид хранилища. И это одна из основных особенностей Windows 8. Данное хранилище автоматически синхронизирует свое состояние между различными компьютерами одного пользователя. Это хранилище не предназначено для больших объемов данных. Ограничение размера папки – 100 килобайт. После достижения лимита данные будут продолжать успешно писаться в папку, но не будут синхронизироваться.

Получить доступ к папке можно следующим образом:

   1:  var applicationData = Windows.Storage.ApplicationData.current;
   2:  var roamingFolder = applicationData.roamingFolder;

Запись и чтение файлов происходит аналогично предыдущим примерам. Также существует несколько ограничений именований файлов в папке роуминга. Например, запрещено ставить пробелы в начале имени файла.

IndexedDB

Последнее хранилище – база данных, которая может хранить данные типа ключ-значение. Данное хранилище пришло в WinJS из HTML5 и является достаточно мощным механизмом с широкой функциональностью. Более подробно работу с IndexedDB мы рассмотрим в одной из следующих статей.

Как вы видите, Windows 8 и WinJS предоставляют нам множество разнообразных хранилищ для наших данных. Какое из них выбрать – зависит от конкретной задачи. Спецификация Microsoft предоставляет некоторые правила, которые помогут вам сориентироваться:

  1. Используйте хранилище сессии для данных которые часто меняются;
  2. Используйте локальные постоянные хранилища для данных которые не слишком часто меняются и которые должны быть сохранены между вызовами приложения;
  3. Используйте IndexedDB и локальное постоянное хранилище для больших объемов данных;
  4. Используйте локальное временное хранилище для неважных данных, которые могут быть с легкостью восстановлены.

Спасибо за внимание, я надеюсь этой информации вам хватит чтобы начать писать приложения ориентированные на данные для платформы Windows 8. Полезные ссылки вы найдете ниже.

  1. Обзор хранилищ данных в Windows 8
  2. Пример приложения, которое работает с различными хранилищами

1 комментарий: