【发布时间】:2012-12-26 20:40:16
【问题描述】:
我正在分析我打算在 Android (PhoneGap) 上的嵌入式浏览器上使用的 javascript 代码。
基本上我需要一个非常大的位域(200k+ 位)来进行计算。
我尝试将它们放入无符号整数数组中,每个项目存储 32 位 - 这确实减少了内存使用,但大大 太慢了(简单的迭代和反转超过 30 秒现代 PC 上位域中的所有位!)
比我制作的老式布尔数组更好。这增加了内存使用量(但我的代码周围的整个 PhoneGap 框架在 Android 上仍然不到 15 兆)。分析向我展示了我算法的初始步骤 - 将位域的所有元素设置为 1(简单的 for 循环) - 需要一半的执行时间(在 PC 上约为 1.5 秒,在 Android 上超过几分钟)。我可以重写我的代码,所以默认值是 0 而不是 1(反转所有条件),但我仍然不知道如何将这么大的数组快速设置为 0。
编辑按要求添加我的代码:
var count = 200000;
var myArr = [];
myArr.length = count;
for(var i = 0; i < count ; i++)
myArr[i] = true;
有人可以指出我如何清除非常大的数组,或者有没有更快的方法来存储和操作 javascript 中的大型位域?
【问题讨论】:
-
Bitfields ... Javascript ... 快速 ... 问:我是唯一一个在这里看到多重矛盾的人吗?)?
-
您介意发布代码吗?
-
PiotrK,试试 Typed Arrays:khronos.org/registry/typedarray/specs/latest - 这是 Bellard 的 JS x86 模拟器的选择:bellard.org/jslinux/tech.html;从 4.0 开始支持 caniuse.com/typedarrays
-
@paulsm4 我只看到一个矛盾,三方面的且不明显。 javascript 中的位域是可能的。快速位域是可能的。快速的 javascript 是可能的。这里唯一不明显的是如何在 Javascript 中制作快速位域。
-
在您的所有计算中是否不可能将
undefined值视为true?这样您就可以完全跳过初始化阶段。
标签: javascript cordova bit-manipulation bit-fields