我只是一个学生,刚加入社区。拿我说的话持保留态度。
当我们以千兆字节为单位测量现代个人计算机的内存时,我不确定为什么每个人都对一万行业务如此眨眼。
好吧。我将假设您正在做的事情需要在浏览器中完成,因此您不能切换到执行本机代码。在这种情况下,寻找 Javascript 的替代品不会让您有任何收获。在浏览器的上下文中,您正在查看一种解释性语言。就程序最终必须运行的指令数量而言,面对解释需要多长时间,一种语言或另一种语言之间的差异可以忽略不计。此外,多年来,Javascript 已经得到了很好的改进。
所以别介意。这里有一个更重要的事情要考虑,它适用于无论你在什么地方编程:缓存。Igor Ostrovsky 解释得很漂亮;阅读它,直到你理解它。
所以我猜你有一些对象会变成类似的东西,"obj1 = {field-1:'a', field-2:'b', ..., field-n:'n'}"
. 您可以选择一个field-i
进行排序。这样做的问题是,当您按 排序时field-i
,您将整个加载obj1
到缓存中,即使您不需要它。您真正想要做的是一次加载所有的field-i
's obj1, obj2, obj3, ..., objm
。因此,您查看一个数组,将其字符串化为:"field1 = [refToRow1, field1inRow1, refToRow2, field1inRow2, ..., refToRowM, field1inRowM]"
。
毕竟,您可能无法将所有 M 行都放入缓存中M==10000
!但是您可以将它们组合成您可以合理地期望缓存来管理的块。有人有这个好号码吗?比如说,64kB?所以你认为你有一个引用i
,M
以及一个可能只是对短字符串的引用的字段(如果你可以在那里拥有字符串本身会更好,但我不认为 Javascript 有效方法)。那是8B?8B*1024 = 64kB?地狱,如果那是正确的,您可以将其全部放入缓存中,分成两块,这意味着您希望在 4 中完成。
所以现在你有一个更小的数组的集合,你想对它们进行排序。这是B-trees的经典应用。虽然为表中的每一列都有一个单独的 B 树可能看起来很多,但事实并非如此。
好的,这样就可以处理排序了。你告诉它按列排序,事实是它已经排序了!您只是使用不同的 b 树重新填充可见表。您仍然需要处理过滤,但这很好。当您找到要显示的内容并按照参考获取其他字段时,您会做一些缓存杂耍,但我仍然希望这会很快,因为您跳过了这么多行。
通常,我会说,如果您想加快速度,请研究多处理。但我认为浏览器仍在努力通过其 Javascript 实现来实现这一目标。另外,虽然它非常适合排序,但要使它对过滤部分有用,需要付出很多努力,我希望你可以不用它也能做得很好。
我希望这不是太漫不经心,它会给你一些想法。祝你好运!