Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2012, 21:18
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Работа с локальным хранилищем, как с объектом
http://habrahabr.ru/post/143597/
Выношу на обсуждение своё небольшое изобретение для тех, кого нет на хабре и для тех, кого харит там комментировать. Здесь хотя-бы можно нормально обосрать, не боясь слива.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #2 (permalink)  
Старый 10.05.2012, 22:16
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Из за наличия таймера с таким объектом нужно работать специфически например насколько я понимаю его в цикл нельзя вставить
Ответить с цитированием
  #3 (permalink)  
Старый 10.05.2012, 22:19
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от vadim5june
Из за наличия таймера с таким объектом нужно работать специфически например насколько я понимаю его в цикл нельзя вставить
Присваивать — да, в цикле не желательно. А вот получать значения вполне можно.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #4 (permalink)  
Старый 10.05.2012, 22:21
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

А хотя, чего бы нет? Взять объект, поработать с ним в цикле, а затем, после всех операций, присвоить.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #5 (permalink)  
Старый 10.05.2012, 22:33
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

мда, вариант интересный но не годный, например такой способ не вызовет геттер и вся твоя реализация идет прахом:
objectLocalStorage = { a: 4, b: {c: 2} };
var b = objectLocalStorage.b;
b.c = 10;
alert( objectLocalStorage.b.c ); // alert 2
Я делал что-то подобное, но отказался от этого решения из-за этого недостатка.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 10.05.2012 в 22:45.
Ответить с цитированием
  #6 (permalink)  
Старый 10.05.2012, 22:43
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

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

С другой стороны, с этим объектом можно поработать, а затем присвоить туда, откуда взял. Всё же некоторая оптимизация.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #7 (permalink)  
Старый 11.05.2012, 03:31
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Идея — говно
Цитата:
Несмотря на количество плюсов, которое больше нуля и количеству пользователей, добавивших статью в избранное (на текущий момент 71), считаю идею провальной и не пригодной для крупных проектов с большими объемами данных. Кроме кучи очевидных минусов, описанных в статье, есть менее очевидный минус, касающийся производительности. Каждый раз, когда вы запрашиваете или меняете данные в объекте-хранилище, вызывается стрингификация объекта, затем проверка, равна ли полученная строка значению из localStorage, затем, если проверка вернула ложь, строка отправляется в localStorage. Если какой-либо элемент объекта хранилища перебирать в цикле, эта операция будет происходить на каждой итерации, даже если банально инкрементируется какое-нибудь число из объекта.

Предлагаю относиться к этой статье, как к некоему эксперименту, никак не упрощающему веб разработку и, при повседневном использовании идущем ей во вред.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #8 (permalink)  
Старый 11.05.2012, 03:57
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от FINoM
есть менее очевидный минус, касающийся производительности.
Так не покатит?
if(timer == null) {
            timer = setTimeout( function(){
                var stringified = JSON.stringify( _objectLocalStorage );
                // некое подобие оптимизации: если данные в объекте не изменились,
                // значит присваивания никакого не было, сработал обычный гет
                if( stringified !== localStorage.getItem( 'objectStorage' ) ) {
                    // сохраняем 
                    localStorage.setItem( 'objectStorage', stringified );
                }
                timer = null;
            }, 0);
        }

Последний раз редактировалось Gvozd, 11.05.2012 в 04:30. Причина: исправлена опечатка
Ответить с цитированием
  #9 (permalink)  
Старый 11.05.2012, 04:27
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Gvozd
Так не покатит?
Дай-ка подумать... Значит, во-первых, не вызывается этот кошмар при каждой итерации, во-вторых, не будет «перебоя» новых данных старыми, что являлось следствием асинхронности. Вариант. Очень даже не плохой, на сонную голову.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #10 (permalink)  
Старый 11.05.2012, 04:29
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Gvozd
if(timer != null) {
дык может не != а все же ==
не?
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Работа с табличными данными, как? Spelesto Общие вопросы Javascript 31 14.12.2010 20:56
Работа с объектом MadGest Общие вопросы Javascript 3 21.09.2010 14:28
Работа с объектом style (CSSStyleDeclaration) Skipp Events/DOM/Window 10 22.05.2010 11:49
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20