我刚刚发现 Javascript 有通过 这个链接 使用类型化数组。我立即好奇这种对象在语言中的好处是什么。
我注意到 UInt8Arrays 丢失了我通常会为正常数组对象使用的像
我原以为使用 UInt8Arrays 可能会获得一些性能提升,但事实并非如此。
我正在使用d3库快速生成一个大数组。此脚本输出如下:
我注意到 UInt8Arrays 丢失了我通常会为正常数组对象使用的像
.map()
的函数,所以如果你想循环遍历它们,你需要使用一个 for
循环。我原以为使用 UInt8Arrays 可能会获得一些性能提升,但事实并非如此。
var a = d3.range(225)
var b = new Uint8Array(d3.range(225))
console.time("a")
var result = 0;
for (var j = 10000; j >= 0; j--) {
for (var i = a.length - 1; i >= 0; i--) {
result += a[i];
};
};
console.timeEnd("a")
console.time("b")
var result = 0;
for (var j = 10000; j >= 0; j--) {
for (var i = b.length - 1; i >= 0; i--) {
result += b[i];
};
};
console.timeEnd("b")
我正在使用d3库快速生成一个大数组。此脚本输出如下:
a: 2760.176ms
b: 2779.477ms
因此,性能并没有得到改善。当您插入错误的值时,UInt8Array也不会抛出错误。
> new Uint8Array([1,2,3,4,'aasdf'])
[1,2,3,4,0]
考虑到这一点,Javascript中UInt8Array
的适当使用情况是什么?似乎普通数组更加灵活、同样强大且同样快速。
a[0] = null
。在数学运算中,null
将被视为0
,但这会对计时结果产生非常大的影响。在我的机器上,时间从约5ms
变为约47ms
。 - user1106925