Использование объекта окна для хранения сеанса вместо хранилища AmplifyJS

Я использую магазин AmplifyJS. Я думаю, что это хорошая оболочка для постоянного хранения. Я использовал его в плагине JQuery, и он работает очень хорошо.

Однако в последнее время мне было интересно, могу ли я просто сделать то же самое, используя переменную пространства имен в объекте window?!

AmplifyJS Store + JSON2.js (требуется для сериализации данных) обходится мне в 22 КБ (минифицировано 8 КБ) одного только размера файла, не говоря уже о дополнительном вспомогательном коде, который мне пришлось создать для этого. Кроме того, я использую только sessionStorage (т.е. мне не нужно сохранение после закрытия окна браузера, только пока окно активно).

Итак, действительно ли есть какая-то серьезная причина, по которой я не могу использовать объект window вместо AmplifyJS Store для моих конкретных обстоятельств?! Я думал о функции expiry, но я могу легко встроить ту же функциональность в несколько строк кода.

Спасибо.


person BannerMan    schedule 14.06.2013    source источник
comment
Все, что хранится в окне, не является постоянным. Вы перезагружаете страницу или переходите по ссылке, вы теряете все данные.   -  person bfavaretto    schedule 14.06.2013
comment
@bfavaretto Спасибо. Не могли бы вы опубликовать это как ответ ?! Ваше здоровье.   -  person BannerMan    schedule 14.06.2013
comment
Поскольку это уже сделал другой пользователь, вместо этого я голосую за его ответ.   -  person bfavaretto    schedule 14.06.2013
comment
@bfavaretto Хорошо. Ваше здоровье.   -  person BannerMan    schedule 14.06.2013


Ответы (2)


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

person Drew Shafer    schedule 14.06.2013
comment
Спасибо. Думаю, я действительно принял AmplifyJS Store как должное #BigTime, лол. Может быть, я пытаюсь переоптимизировать. - person BannerMan; 14.06.2013

Локальное хранилище HTML5 в объекте окна само по себе имеет очень простой API:

 var valueOfName = window.localStorage.getItem("name");
 window.localStorage.setItem("name", "value");

вы даже можете опустить глобальный объект окна:

 var valueOfName = localStorage.getItem("name");
 localStorage.setItem("name", "val");

кроме того, вы можете применить нотацию в стиле массива:

 var valueOfName = localStorage["name"];
 localStorage["name"] = "value";

вот оно! И у него нет даты истечения срока действия, строк URL или других сложностей в его API, которые имели место в более старом подходе к файлам cookie. Все, что предоставляет AmplifyJs (как я вижу), — это поддержка старых браузеров (которые использовали файлы cookie), предоставляя вам тот же API, что и оригинальный localStorage.

Другими словами, если вы не нацелены на Netscape Navigator, Mosaic и IE 7, вы можете забыть об использовании AmplifyJS и применить собственный API localStorage.

Однако, несмотря на подход, вы никогда не должны полагаться на постоянство на стороне клиента, потому что оно полностью зависит от локального браузера (клиент может просто очистить кеш, переустановить что-то или войти с другого компьютера) - используйте базы данных на стороне сервера и аналогичные технологии сохранения информации о пользователе.

person Community    schedule 14.06.2013
comment
Спасибо. AmplifyJS Store также позволяет вам установить StorageType, например. localStorage, sessionStorage и т. д. В моем конкретном случае я использую исключительно sessionStorage. Я построил свою собственную логику, чтобы использовать sessionStorage по умолчанию, или, если это недоступно, положиться на мудрость AmplifyJS Store. Я не храню никаких важных пользовательских данных, просто данные, необходимые плагину для работы, пока веб-страница активна. - person BannerMan; 17.06.2013
comment
Кстати, разница между локальными и сеансовыми хранилищами (согласно спецификации) — это время, когда оно очищается: для локального оно остается до тех пор, пока вы не удалите элемент с помощью localStorage.removeItem(key) или не удалите localStorage['key'] или не перезапишете с новым значением, но sessionStorage стирается каждый раз, когда пользователь закрывает окно браузера (поэтому я в основном предпочитаю сеанс localStorage amon - вы можете перезагрузить компьютер для обновлений, перезапустить браузер и вернуться туда, где вы были с приложением). IMO всегда лучше контролировать время стирания самостоятельно: например. очистка переменных localStorage после выхода из системы. - person ; 17.06.2013
comment
Да я понимаю разницу. Я использую sessionStorage, потому что это лучший тип хранилища для моего приложения (нет необходимости в сохранении после сеанса пользователя), а также он позволяет моему приложению работать в режиме нескольких вкладок браузера без каких-либо проблем. - person BannerMan; 20.06.2013