dataview vs typedarray

Benchmark created on


Setup

var { arrayBuffer, dataView, byteOffset, length } = (() => {
	const values = new Float32Array([0, 0, 0, 3.14, 1.5, 6.2, 66666, 0, -3]);
	return {
		arrayBuffer: values.buffer,
		dataView: new DataView(values.buffer),
		byteOffset: 4 * 2,
		length: 5,
	};
})();

Test runner

Ready to run.

Testing in
TestOps/sec
复制一份;用 Float32Array 自带函数拷贝,不能处理大小端问题
const values = new Float32Array(length);
values.set(new Float32Array(arrayBuffer, byteOffset, length));
ready
复制一份;用 DataView 读,能指定大小端
const values = new Float32Array(length);
for (let i = 0; i < length; ++i) {
	values[i] = dataView.getFloat64(byteOffset + i * 4, false)
}

ready
不拷贝。直接引用 .bin,不能处理大小端问题
const values = new Float32Array(arrayBuffer, byteOffset, length)
ready
复制一份后引用;不能处理大小端问题
const copy = arrayBuffer.slice(byteOffset, byteOffset + length * 4);
const values = new Float32Array(copy);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.