2012-05-17 3 views
0

У меня есть несколько элементов, которые я храню в локальном хранилище. Что страница загружается, у меня есть около 20 линий, как это:Загрузка локального хранилища в одном чтении

var SomeVar = localStorage.getItem('SomeKey'); 

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

Как я могу прочитать локальное хранилище в одном чтении?

Спасибо.

ответ

0

Я не могу думать о причине вы хотите сделать это, но вы могли бы воспользоваться тем, что localStorage в основном объект и сделать что-то вроде этого:

var tempLocalStorage = {}; 
for(prop in localStorage) { 
    if(localStorage.hasOwnProp(prop)) { 
     tempLocalStorage[prop] = localStorage.getItem(prop); 
    } 
} 

var SomeVar = tempLocalStorage["SomeKey"]; 

Я перебирая значения в localStorage и добавляя их во временную локальную переменную хранилища. Затем вы можете получить доступ к временной переменной локального хранилища с теми же ключами, что и стандартный localStorage, но со стандартным синтаксисом свойств объекта, а не с настраиваемым синтаксисом getItem(), который использует localStorage.


Редактировать: Вот предложение. Сохраните все переменные на один объект, затем загрузите и сохраните этот объект с localStorage вместо сохранения отдельных объектов. Это индивидуальная переменная, обращающаяся к вызовам, которые занимают больше всего времени. Для считывания 10 символов из одной переменной в память требуется примерно такое же количество времени, что и чтение 1000, согласно this post по оптимизации localStorage.

+0

потому что каждый раз, когда вы обращаетесь к собственности, вы получаете доступ к нему с жесткого диска. Я хочу получить все с жесткого диска в одном чтении вместо 20. – frenchie

+0

@frenchie: Это правда, но если вы читаете только 20 переменных, я не думаю, что это вызовет проблемы с производительностью, если это то, что вы беспокоился. Я был бы обеспокоен, если бы вместо этого получал сотни или тысячи переменных. –

+0

Я знаю, что это будет минимальная оптимизация; Мне было интересно, возможно ли это. Нет, если нет. – frenchie

0

Вы можете сохранить все переменные в одном объекте и использовать JSON, чтобы преобразовать его и из строки:

// read: 
var localvars = JSON.parse(localStorage.myvars || '{}'); 
// copy from temporary object to desired variable: 
var someVar = localvars.someKey; 
// write: 
localStorage.myvars = JSON.stringify(localvars); 

Если вы используете этот метод, вы должны быть осторожны, чтобы не хранить любые рекурсивные переменные в localvars, так как это приведет к ошибке JSON.stringify. Но это не проблема, потому что вы не смогли бы сохранить эти структуры в localStorage в любом случае.

Я бы не рекомендовал использовать цикл for-in на localStorage, потому что вы не должны предполагать, что ваш скрипт является единственным, имеющим доступ к localStorage.

0

Вы посмотрели на jStorage? http://www.jstorage.info/ Я использую его совсем немного, и он, похоже, делает что-то подобное, поскольку он хранит все под одним объектом. Также кросс-браузер для более старых версий IE.

Смежные вопросы