Created
July 26, 2015 13:57
-
-
Save letmaik/71dd7fd98e960b237c6f to your computer and use it in GitHub Desktop.
Performance of DataView vs inline code for little/big endian conversion (inline wins)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html> | |
<body> | |
DataView: <span id="time_dataview"></span><br /> | |
Inline: <span id="time_inline"></span> | |
<script> | |
var littleEndian = (function() { | |
var buffer = new ArrayBuffer(2); | |
new DataView(buffer).setInt16(0, 256, true); | |
return new Int16Array(buffer)[0] === 256; | |
})(); | |
console.log('little endian: ' + littleEndian) | |
// create test data, 100MiB, assuming big endian float32's | |
var len = 26214400 | |
var buf = new ArrayBuffer(len*4) | |
// Approach A: DataView | |
var t0 = new Date() | |
for (var n=0; n<10; n++) { | |
// convert floats in buffer to little endian | |
var dv = new DataView(buf) | |
for (var i=0; i<len+4; i+=4) { | |
dv.setFloat32(i, dv.getFloat32(i, false)) | |
} | |
} | |
var t1 = new Date() | |
var t = ((t1-t0)/10).toFixed(2) | |
document.getElementById('time_dataview').innerHTML = t; | |
console.log('convert_endian_dataview: ' + t + 'ms') | |
// Approach B: inlined code | |
var t0 = new Date() | |
var bytes = new Uint8Array(buf) | |
for (var n=0; n<10; n++) { | |
// convert floats in buffer to little endian | |
var holder; | |
for (var i=0; i<len+4; i+=4) { | |
holder = bytes[i]; | |
bytes[i] = bytes[i+3]; | |
bytes[i+3] = holder; | |
holder = bytes[i+1]; | |
bytes[i+1] = bytes[i+2]; | |
bytes[i+2] = holder; | |
} | |
} | |
var t1 = new Date() | |
var t = ((t1-t0)/10).toFixed(2) | |
document.getElementById('time_inline').innerHTML = t; | |
console.log('convert_endian_inline: ' + t + 'ms') | |
// now we can create a typed array | |
var ta = new Float32Array(buf) | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment