【发布时间】:2017-08-08 09:41:41
【问题描述】:
嗨,基本上我想做的是将一个 JavaScript 数组传递给一个 c 模块函数,然后该函数就地修改数组,然后 JavaScript 读取修改后的数组。
当前的方法是使用carrays.i 和array_functions,创建Array 和doubleArray 并从doubleArray 转换,由于复制数组,它给我的结果比原生JS 更差。我的数组有大约 41000 个项目。
C模块:~10ms(实际C函数运行时间~0.1ms)
JS 模块:~3ms
对我来说,不可能从一开始就使用doubleArray(因为这是更大过程的一部分)。所以问题是我该如何改进它?是否可以使用TypedArray/ArrayBuffer?如果是那怎么办?
以下是我的伪代码
let cArray = MyCModule.new_doubleArray(array.length),
outArray = new Array(array.length);
arrayCopyJS2C(cArray, array);//written in JS and use a lot of time
MyCModule.MyCFunction(cArray, array.length);
arrayCopyC2JS(cArray, outArray);//also written in JS and use a lot of time
【问题讨论】:
-
为什么不用原生JS?往返服务器听起来对我来说是一个薄弱环节。
-
你试过在 JavaScript 中使用
Float64Array吗? -
为什么要复制数组?为什么要在 JS 中这样做?
-
@Taylor 因为我想提高运行时间
-
@Bergi 是的,尝试过
Float64Array,它是缓冲区(MyFloat64Array.buffer),我们是在 nodejs 中开发的,所以我们在 js 中做所有事情。
标签: javascript node.js swig v8 node-gyp