在Javascript中存储带有哈希值的大列表的最佳方式
Best way to store a huge list with hashes in 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阅读器,只显示新的饲料。所以我计算一个哈希从链接(每个新闻有一个唯一的链接),并将其存储在对象(mongoDB)。顺便说一句:10,000个条目不是正常情况(但有可能)
我的建议:
- 为手头的任务使用尽可能小的散列。如果你正在处理数百个可哈希字符串,而不是数十亿个,那么你的哈希长度可以相对较小。
- 将哈希存储为整数,而不是字符串,以避免占用比需要的更少的空间。
- 不存储为对象,只是存储在一个简单的二叉树log2(keySize)深度
进一步的想法:
- 你可以用混合方法来解决这个问题吗?对不到一个月的最新提要使用散列,不要显示超过一个月的条目。将哈希和日期存储在一起,每天清除旧的哈希?
您可以使用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
是不受欢迎的,所以你不应该这样做。为什么? ;因为你不应该修改不属于你的东西
10,000是相当多。您可以考虑将散列存储在数据库中,然后使用ajax进行查询。查询一个哈希值可能需要更长的时间,但你的页面加载速度要快得多。
无论如何,这在现代浏览器和现代计算机上都不是问题。
每个10k条目占用50字节,仍然占用不到500KB的ram。
只要js是压缩的,那么带宽就没有问题-但是要尽量晚一点提供数据,这样他们就不会阻碍页面加载性能。
总而言之,除非你想迎合手机,否则你的解决方案是好的。
相关文章:
- Polymer 1.0:管理简单项目列表的最佳实践
- 将选项添加到插件msDropdown生成的下拉列表的最佳方式是什么
- 使用bottle将列表从python传递到js的最佳方式是什么
- 提交后从选择下拉列表中自动选择选项的最佳方法
- 从 Dojo 中的对象列表创建表的最佳方法
- 根据 jquery 中 2 个选择列表的选定值动态计算的最佳方法
- 什么是应用于帖子列表的最佳 Jquery 轮播插件
- 计算日期窗体下拉列表的月天数的最佳方法
- 在 jquery 中动态创建元素列表的最佳实践
- 对两个下拉列表交替约束的最佳方法
- 如何将一个元素列表移动到另一个性能最佳的元素中
- 在JQuery / Javascript中加载从JSON列表返回的URL的最佳方法是什么
- 在html 4中使用CSS或javascript折叠和扩展列表的最佳方式是什么
- JQueryUI:创建两个拖放列表的最佳方式,其中一个是可排序的,另一个在拖放时重新排序
- 用值列表填充文本框的最佳方法是使用java脚本或jquery双击
- 在asp.net-mvc网站中,存储列表客户端以切换下拉选择选项的最佳方式是什么
- 筛选只能通过ASP.NET MVC中的javascript进行筛选的数据库记录列表的最佳方法是什么
- 在Sammy.js模板中呈现嵌套对象列表的最佳方式
- jQuery-用列表数据填充隐藏字段的最佳方式
- 在JavaScript/jQuery中管理用户列表的最佳方法是什么