javascript中存储和操作位字段的哪种方式最快?(200k+;位)

javascript中存储和操作位字段的哪种方式最快?(200k+;位),javascript,cordova,bit-manipulation,bit-fields,Javascript,Cordova,Bit Manipulation,Bit Fields,我正在分析我的javascript代码,打算在Android上的嵌入式浏览器(PhoneGap)上使用 基本上,我需要一个非常大的位域(200k+位)来进行计算 我尝试将它们放入一个无符号整数数组中,每个项存储32位——这确实减少了内存使用,但使执行时间大大降低(在现代PC上,简单地迭代和反转位字段中的所有位超过30秒!) 比我做了一系列很好的老式布鞋。这增加了内存使用量(但在Android上,围绕我的代码,整个PhoneGap框架的内存使用量仍然不足1500万)。分析向我展示了我的算法的初始步

我正在分析我的javascript代码,打算在Android上的嵌入式浏览器(PhoneGap)上使用

基本上,我需要一个非常大的位域(200k+位)来进行计算

我尝试将它们放入一个无符号整数数组中,每个项存储32位——这确实减少了内存使用,但使执行时间大大降低(在现代PC上,简单地迭代和反转位字段中的所有位超过30秒!)

比我做了一系列很好的老式布鞋。这增加了内存使用量(但在Android上,围绕我的代码,整个PhoneGap框架的内存使用量仍然不足1500万)。分析向我展示了我的算法的初始步骤——将位字段的所有元素设置为1(简单for-loop)——需要一半的执行时间(在PC上约1.5秒,在Android上超过几分钟)。我可以重写我的代码,使默认值为0而不是1(与所有条件相反),但我仍然不知道如何将如此大的数组设置为0’s快

按要求编辑添加我的代码:

var count = 200000;
var myArr = [];

myArr.length = count;
for(var i = 0; i < count ; i++)
    myArr[i] = true;
var计数=200000;
var myArr=[];
myArr.length=计数;
对于(变量i=0;i

有人能告诉我如何清除超大数组,或者有没有更快的方法在javascript中存储和操作大的位字段?

看看这是否是创建数组的更快方法:

var myArray = [true];
var desiredLength = 200000;
while (myArray.length < desiredLength) {
    myArray = myArray.concat(myArray);
}
if (myArray.length > desiredLength) {
    myArray.splice(desiredLength);
}

为什么首先要预填充阵列!使用
未定义的
对您有利。请记住,未定义的行为是一个错误的值。因此,在执行布尔检查时,它的行为与0/false完全相同

var myArray = new Array(200000);

if (myArray[1]) {   
  //I am a truthy value
} else {
  //I am a falsey value
}

因此,当您以这种方式初始化数组时,没有理由进行预填充!这意味着无需额外处理,并充分利用稀疏阵列

位域。。。Javascript。。。快速的问:我是唯一一个在这里看到多重矛盾的人吗?你介意发布代码吗?PiotrK,试试类型化数组:-这是Bellard的JS x86模拟器的选择:;从4.0@paulsm4支持,我只看到一个矛盾,三面性的,不明显的。javascript中的位字段是可能的。快速位字段是可能的。快速javascript是可能的。这里唯一不明显的是如何在Javascript中生成快速位域。在所有计算中,是否不可能将
未定义的
值视为
?这样你就完全跳过了初始化阶段。哇,真是个好主意-不幸的是,它工作不好,在我的电脑上比简单的数组迭代器慢10倍左右(这两种方法我都运行了50次)@Asad,这取决于你的JavaScript实现。在我的浏览器(Mac OS X 10.8.2上的Chrome 23.0.1271.101)中,
concat
版本每秒执行的操作数大约是“正常”版本的两倍。真正重要的是Android上每个版本的phonegap速度有多快。我没有任何Android设备可供测试。在我的系统上测试,它在Chrome上快了3倍,在FF上慢了8倍,在IE上慢了3倍(比op的方法)。@robmayoff我测试了
push
方法,但在FF上慢了两倍,所以我放弃了它。非常奇怪的是,不同JS实现的结果差异如此之大,特别是因为我希望底层算法是相同的
var myArray = new Array(200000);

if (myArray[1]) {   
  //I am a truthy value
} else {
  //I am a falsey value
}