我正在將一些OpenGL代碼移植到WebGL,而JavaScript沒有真正的數組這一事實令人傷心。我可以使用Float32Array
的(和其他ArrayBuffer
類型),但這似乎不能幫助性能。任何提高JavaScript數組性能的方法?
作爲一個實驗來比較Array
VS Float32Array
VS Float64Array
的表現,我定時冒泡排序上100000輛花車,看看是否有任何區別:
function bubbleSort(array) {
var N = array.length;
for (var i = 0; i < N; i++)
for (var j = i; j < N-1; j++)
if (array[j] > array[j+1]) {
var tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
// var nums = new Array(100000); // regular 'JS' array
// var nums = new Float32Array(100000); // actual buffer of 32-bit floats
var nums = new Float64Array(100000); // actual buffer of 64-bit floats
for (var i = 0; i < nums.length; i++)
nums[i] = Math.random() * 1000;
bubbleSort(nums);
for (var i = 0; i < nums.length; i++)
console.log(nums[i]);
沒有太大的區別。真的,編譯器需要array
參數的一些靜態類型信息才能真正獲得體面的性能。我們只是在JS中遇到糟糕的數組性能嗎?任何方式在這個?短期使用ASM.js那就是......
你是怎麼測試這個的?你確定它不是'Math.random()'被稱爲100k次,這會導致你的性能問題? – Rob 2014-10-05 03:52:19
@Rob立即刪除'bubbleSort'並完成其結束。 – wcochran 2014-10-05 04:10:27
「泡沫排序」和「表演」的帖子似乎是一種矛盾。 – user949300 2014-10-05 04:36:48