在JavaScript性能方面模拟结构处理的C数组

mimic C array of struct processing in JavaScript performancewise

本文关键字:处理 数组 结构 模拟 JavaScript 性能 方面      更新时间:2023-09-26

在C中,可以非常有效地处理大量混合类型的数据记录。例如,计算一个记录作为另一个类似的函数:

struct TypeA{
    int i;
    boolean b;
}
struct TypeA{
    long int l;
    float f;
}
struct TypeA as[1000];
struct TypeB bs[1000];
for(int i=0; i<1000; i++)
    bs[i]=someFunction(as[i]);

as将被线性读取,bs将被类似地写入,因此很容易利用CPU的内存或处理瓶颈,而不会有太多开销。

在JavaScript中,按顺序创建的JS对象可能(但不太可能?)会生成优化的代码。另一方面,数据可以被拆分为更多所使用类型的数组,如Float32Array等,并且someFunction将不得不读取和写入两个以上的数组,从而产生一些更顺序的存储器访问流。

有没有其他有效的方法?

在Javascript中,我写了这样的C代码:

var as =new Array(1000),
    bs =new Array(1000);
/* struct TypeA */
var TypeA = function(x,y) {
    this.i = x;
    this.b = y;
   return this;
}
var TypeB = function(x,y) {
    this.l = x;
    this.f = y;
}
var someFunction = function(a,b) {
   // doing something ....
   b.l = a.i*2;
   b.f = a.b?0.0:100.0;
}
/** init array first**/
for(var i=0; i<1000; i++) {
    as[i] = new TypeA(i+1, i & 1);
    bs[i] = new TypeB(0,0.0);
}

for(var i=0; i<1000; i++)
    someFunction(as[i],bs[i]);

我认为我能写得更有效率。