Подтвердить что ты не робот

Лучший способ хранения огромного списка с хэшами в Javascript

У меня есть список из 10.000 записей.

, например

myList = {};
myList[hashjh5j4h5j4h5j4]
myList[hashs54s5d4s5d4sd]
myList[hash5as465d45ad4d]
....

Я не использую массив (0,1,2,3), потому что я могу проверить очень быстро
→ если этот хэш существует или нет.

if(typeof myObject[hashjh5j4h5j4h5j4] == 'undefined')
{
  alert('it is new'); 
}
else
{
  alert('old stuff'); 
}

Но я не уверен, это хорошее решение?

Может быть, проблема в обработке объекта с 10.000 записей?

РЕДАКТИРОВАТЬ:
Я пытаюсь создать rss-канал, который показывает только новые каналы. Поэтому я вычисляю хэш из ссылки (каждая новость имеет ссылку uniqe) и сохраняет ее в объекте (mongoDB). BTW: 10.000 записей - это не обычный случай (но это возможно)

4b9b3361

Ответ 1

Мой совет:

  • Используйте как можно меньше хэша для задачи. Если вы имеете дело с сотнями хешируемых строк, то по сравнению с миллиардами, ваша длина хэша может быть относительно небольшой.
  • Сохраняйте хэш как целое число, а не строку, чтобы избежать необходимости занимать меньше места, чем нужно.
  • Не хранить как объекты, просто хранить их в простом двоичном древе log2 (keySize) глубоко.

Дальнейшие мысли:

  • Можете ли вы прийти к этому с помощью гибридного подхода? Используйте хеши для последних фидов менее месяца, и не беспокойтесь, показывая предметы, которые больше месяца. Храните хэш и дату вместе, и очищайте старые хеши каждый день?

Ответ 2

Вы можете использовать оператор in:

if ('hashjh5j4h5j4h5j4' in myList) { .. }

Однако это также вернет true для членов, которые находятся в цепочке прототипов объектов:

Object.prototype.foo = function () {};
if ("foo" in myList) { /* will be true */ };

Чтобы исправить это, вы можете использовать hasOwnProperty:

if (myList.hasOwnProperty('hashjh5j4h5j4h5j4')) { .. }

Пока вы, возможно, не добавляли методы Object.prototype, вы не можете гарантировать, что другие сторонние библиотеки, которые вы используете, не имеют; кстати, расширение Object.prototype неодобрительно, поэтому вы не должны этого делать. Почему; потому что вы не должны изменять то, что вам не принадлежит.

Ответ 3

10.000 довольно много. Вы можете рассмотреть возможность хранения хешей в базе данных и запросить его с помощью ajax. Возможно, потребуется немного больше времени, чтобы запросить один хэш, но ваша страница загружается намного быстрее.

Ответ 4

Это не проблема в современном браузере на современных компьютерах.

10 тыс. записей, которые занимают до 50 байт, по-прежнему занимают менее 500 КБ памяти.

Пока js обслуживается gzipped, тогда пропускная способность не проблема - но постарайтесь как можно раньше обслуживать данные, чтобы они не блокировали воспринимаемую производительность pageload.

В целом, если вы не хотите обслуживать мобильные телефоны, тогда ваше решение будет прекрасным.