установив значение превышения квоты [дубликат]

Для сортировки по полю нескольких объектов массива. Введите имя своего поля в массив arrprop, например ["a","b","c"], а затем передайте второй параметр arrsource, который мы хотим отсортировать.

function SortArrayobject(arrprop,arrsource){
arrprop.forEach(function(i){
arrsource.sort(function(a,b){
return ((a[i] < b[i]) ? -1 : ((a[i] > b[i]) ? 1 : 0));
});
});
return arrsource;
}
16
задан HM2K 14 April 2011 в 13:23
поделиться

4 ответа

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

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

Если хранилище низкое, вы можете попросить пользователя увеличить локальное хранилище.

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

4
ответ дан Ben 21 August 2018 в 18:51
поделиться
  • 1
    да, так как вы, пользователь установили квоту в хром? – Michael 3 March 2014 в 17:15
  • 2
    Не о хроме? Вопрос явно о Chrome, он упоминается в заголовке, вопросе, и он помечен с помощью google-chrome. Что касается запроса пользователя, Chrome этого не делает, и без какого-либо механизма для изменения квоты в javascript или даже ручном режиме пользователем вряд ли представляется полезным написать код, чтобы вызвать пользователя. – Michael 5 March 2014 в 16:03
  • 3
    @Michael, согласно документации хрома developers.google.com/chrome/whitepapers/storage#managing_quota , он действительно запрашивает пользователя, если вы попросите хранить файловую систему. – Ben 5 March 2014 в 21:00
  • 4
    localStorage не доступен через API файловой системы, к нему можно обращаться через переменную window.localStorage. Вы не получите приглашение, если вы его превысите, вы просто получите молчаливый сбой (если только вы не проверили / не захватили условие). – Michael 5 March 2014 в 23:42
  • 5
    эта страница, похоже, не очень хорошо документирует localStorage, она только упоминает ее один раз попутно, и на самом деле не говорит точно, где, где бы она ни находилась в любой из представленных ею моделей. (и это действительно не похоже на то, чтобы полностью соответствовать ни одному из них, из того, что я могу сказать ...) – Michael 5 March 2014 в 23:46

Вы не можете, он жестко подключен к 5 МБ. Это дизайнерское решение разработчиками Chrome .

В Chrome, как и в случае с Java, девайс SQL и кэша также имеют низкие ограничения по умолчанию, но если вы упакуете приложение для Chrome App Store вы можете увеличить их .

См. Также Управление автономным хранилищем HTML5 - Google Chrome .

11
ответ дан brasofilo 21 August 2018 в 18:51
поделиться
  • 1
    я очень разочарован разработчиками Chrome – Michael 3 March 2014 в 17:14
  • 2
    5 МБ с кодировкой UTF16. так что окружающих 2.5 M символов. – Emmanuel Devaux 26 March 2014 в 10:44
  • 3
    это все еще верно ?! так что все еще 5MB лимит localstorage ?! – eKelvin 3 October 2014 в 16:36
  • 4
    @ Майкл меня тоже. Это просто глупо. Я создаю GIF на клиенте и хочу хранить их, чтобы они не перегенерировали их каждый раз. IndexedDB - это решение, но в моем случае это избыток. Кажется, Dexie.js помогает, поэтому я попробую это – Pawel 17 May 2016 в 13:20

5MB - это жесткий предел, и это глупо. IndexedDB дает вам ~ 50 МБ, что является более разумным. Чтобы было проще использовать try Dexie.js https://github.com/dfahlander/Dexie.js

Обновление:

Dexie.js был на самом деле все еще избыток для моих простых целей с ключевыми значениями, поэтому я написал этот гораздо более простой скрипт https://github.com/DVLP/localStorageDB

с этим у вас есть 50 МБ и может получить и установить такие значения

// Setting values
ldb.set('nameGoesHere', 'value goes here');

// Getting values - callback is required because the data is being retrieved asynchronously:
ldb.get('nameGoesHere', function (value) {
  console.log('And the value is', value);
});

Скопировать / вставить строку ниже, чтобы ldb.set() и ldb.get() из приведенного выше примера стали доступны.

!function(){function e(t,o){return n?void(n.transaction("s").objectStore("s").get(t).onsuccess=function(e){var t=e.target.result&&e.target.result.v||null;o(t)}):void setTimeout(function(){e(t,o)},100)}var t=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;if(!t)return void console.error("indexDB not supported");var n,o={k:"",v:""},r=t.open("d2",1);r.onsuccess=function(e){n=this.result},r.onerror=function(e){console.error("indexedDB request error"),console.log(e)},r.onupgradeneeded=function(e){n=null;var t=e.target.result.createObjectStore("s",{keyPath:"k"});t.transaction.oncomplete=function(e){n=e.target.db}},window.ldb={get:e,set:function(e,t){o.k=e,o.v=t,n.transaction("s","readwrite").objectStore("s").put(o)}}}();
4
ответ дан danwellman 21 August 2018 в 18:51
поделиться
  • 1
    При использовании этого метода, как я могу получить все сохраненные ключи? – tjespe 9 January 2017 в 15:34
  • 2
    @tjespe, как показано в примере ldb.get('nameGoesHere', function (value) { console.log('And the value is', value) }); – Pawel 9 January 2017 в 22:04
  • 3
    @Pawel Я получаю: Не могу прочитать транзакцию свойства неопределенного – user 25 May 2017 в 18:43
  • 4
    Очень полезно! Я только хочу, чтобы это разрешало перечислять неизвестные записи, которые существуют в IndexedDB. (Аналогия: Object.keys(localStorage).) – 7vujy0f0hy 21 November 2017 в 17:14

Вы не можете, но если вы сохраните JSON в своем локальном хранилище, вы можете использовать библиотеку для сжатия таких данных, как: https://github.com/k-yak/JJLC

demo: http://k-yak.github.io/JJLC/

1
ответ дан Florian Rotagnon 21 August 2018 в 18:51
поделиться
  • 1
    Кажется, плохое сжатие. Я попробовал 4MB JSON и JJLC только уменьшил его до 68% от его оригинала. По сравнению с gzip он уменьшился до 5%. – James 8 March 2018 в 14:03
Другие вопросы по тегам:

Похожие вопросы: