jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
<script>
var mat4 = {};
mat4.set = function(mat, dest) {
dest[0] = mat[0];
dest[1] = mat[1];
dest[2] = mat[2];
dest[3] = mat[3];
dest[4] = mat[4];
dest[5] = mat[5];
dest[6] = mat[6];
dest[7] = mat[7];
dest[8] = mat[8];
dest[9] = mat[9];
dest[10] = mat[10];
dest[11] = mat[11];
dest[12] = mat[12];
dest[13] = mat[13];
dest[14] = mat[14];
dest[15] = mat[15];
return dest;
};
mat4.multiply = function(mat, mat2, dest) {
if (!dest) {
dest = mat
}
// Cache the matrix values (makes for huge speed increases!)
var a00 = mat[0],
a01 = mat[1],
a02 = mat[2],
a03 = mat[3];
var a10 = mat[4],
a11 = mat[5],
a12 = mat[6],
a13 = mat[7];
var a20 = mat[8],
a21 = mat[9],
a22 = mat[10],
a23 = mat[11];
var a30 = mat[12],
a31 = mat[13],
a32 = mat[14],
a33 = mat[15];
var b00 = mat2[0],
b01 = mat2[1],
b02 = mat2[2],
b03 = mat2[3];
var b10 = mat2[4],
b11 = mat2[5],
b12 = mat2[6],
b13 = mat2[7];
var b20 = mat2[8],
b21 = mat2[9],
b22 = mat2[10],
b23 = mat2[11];
var b30 = mat2[12],
b31 = mat2[13],
b32 = mat2[14],
b33 = mat2[15];
dest[0] = b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30;
dest[1] = b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31;
dest[2] = b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32;
dest[3] = b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33;
dest[4] = b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30;
dest[5] = b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31;
dest[6] = b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32;
dest[7] = b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33;
dest[8] = b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30;
dest[9] = b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31;
dest[10] = b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32;
dest[11] = b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33;
dest[12] = b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30;
dest[13] = b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31;
dest[14] = b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32;
dest[15] = b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33;
return dest;
};
var randomMatrix0 = [];
for (var i = 0, l = 16; i < l; i++) {
randomMatrix0[i] = Math.random() * 10;
}
var randomMatrix1 = [];
for (var i = 0, l = 16; i < l; i++) {
randomMatrix1[i] = Math.random() * 10;
}
var glMat1 = [];
var glMat2 = [];
mat4.set(randomMatrix0, glMat1);
mat4.set(randomMatrix1, glMat2);
var osg = {};
osg.mult = function(a, b, r) {
var t;
if (r === a) {
return osg.Matrix.preMult(a, b);
} else if (r === b) {
// post mult
return osg.Matrix.postMult(a, b);
}
if (r === undefined) {
r = [];
}
var s00 = b[0];
var s01 = b[1];
var s02 = b[2];
var s03 = b[3];
var s10 = b[4];
var s11 = b[5];
var s12 = b[6];
var s13 = b[7];
var s20 = b[8];
var s21 = b[9];
var s22 = b[10];
var s23 = b[11];
var s30 = b[12];
var s31 = b[13];
var s32 = b[14];
var s33 = b[15];
var o00 = a[0];
var o01 = a[1];
var o02 = a[2];
var o03 = a[3];
var o10 = a[4];
var o11 = a[5];
var o12 = a[6];
var o13 = a[7];
var o20 = a[8];
var o21 = a[9];
var o22 = a[10];
var o23 = a[11];
var o30 = a[12];
var o31 = a[13];
var o32 = a[14];
var o33 = a[15];
r[0] = s00 * o00 + s01 * o10 + s02 * o20 + s03 * o30;
r[1] = s00 * o01 + s01 * o11 + s02 * o21 + s03 * o31;
r[2] = s00 * o02 + s01 * o12 + s02 * o22 + s03 * o32;
r[3] = s00 * o03 + s01 * o13 + s02 * o23 + s03 * o33;
r[4] = s10 * o00 + s11 * o10 + s12 * o20 + s13 * o30;
r[5] = s10 * o01 + s11 * o11 + s12 * o21 + s13 * o31;
r[6] = s10 * o02 + s11 * o12 + s12 * o22 + s13 * o32;
r[7] = s10 * o03 + s11 * o13 + s12 * o23 + s13 * o33;
r[8] = s20 * o00 + s21 * o10 + s22 * o20 + s23 * o30;
r[9] = s20 * o01 + s21 * o11 + s22 * o21 + s23 * o31;
r[10] = s20 * o02 + s21 * o12 + s22 * o22 + s23 * o32;
r[11] = s20 * o03 + s21 * o13 + s22 * o23 + s23 * o33;
r[12] = s30 * o00 + s31 * o10 + s32 * o20 + s33 * o30;
r[13] = s30 * o01 + s31 * o11 + s32 * o21 + s33 * o31;
r[14] = s30 * o02 + s31 * o12 + s32 * o22 + s33 * o32;
r[15] = s30 * o03 + s31 * o13 + s32 * o23 + s33 * o33;
return r;
};
osg.mult2 = function(a, b, r) {
var s00 = b[0];
var s01 = b[1];
var s02 = b[2];
var s03 = b[3];
var s10 = b[4];
var s11 = b[5];
var s12 = b[6];
var s13 = b[7];
var s20 = b[8];
var s21 = b[9];
var s22 = b[10];
var s23 = b[11];
var s30 = b[12];
var s31 = b[13];
var s32 = b[14];
var s33 = b[15];
var o00 = a[0];
var o01 = a[1];
var o02 = a[2];
var o03 = a[3];
var o10 = a[4];
var o11 = a[5];
var o12 = a[6];
var o13 = a[7];
var o20 = a[8];
var o21 = a[9];
var o22 = a[10];
var o23 = a[11];
var o30 = a[12];
var o31 = a[13];
var o32 = a[14];
var o33 = a[15];
r[0] = s00 * o00 + s01 * o10 + s02 * o20 + s03 * o30;
r[1] = s00 * o01 + s01 * o11 + s02 * o21 + s03 * o31;
r[2] = s00 * o02 + s01 * o12 + s02 * o22 + s03 * o32;
r[3] = s00 * o03 + s01 * o13 + s02 * o23 + s03 * o33;
r[4] = s10 * o00 + s11 * o10 + s12 * o20 + s13 * o30;
r[5] = s10 * o01 + s11 * o11 + s12 * o21 + s13 * o31;
r[6] = s10 * o02 + s11 * o12 + s12 * o22 + s13 * o32;
r[7] = s10 * o03 + s11 * o13 + s12 * o23 + s13 * o33;
r[8] = s20 * o00 + s21 * o10 + s22 * o20 + s23 * o30;
r[9] = s20 * o01 + s21 * o11 + s22 * o21 + s23 * o31;
r[10] = s20 * o02 + s21 * o12 + s22 * o22 + s23 * o32;
r[11] = s20 * o03 + s21 * o13 + s22 * o23 + s23 * o33;
r[12] = s30 * o00 + s31 * o10 + s32 * o20 + s33 * o30;
r[13] = s30 * o01 + s31 * o11 + s32 * o21 + s33 * o31;
r[14] = s30 * o02 + s31 * o12 + s32 * o22 + s33 * o32;
r[15] = s30 * o03 + s31 * o13 + s32 * o23 + s33 * o33;
return r;
};
var result = [];
var m0 = new Float32Array(randomMatrix0);
var m1 = new Float32Array(randomMatrix1);
var r = new Float32Array(randomMatrix1);
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
glMatrix |
| ready |
ogjs-mult |
| ready |
ogjs-mult-no test |
| ready |
ogjs-mult-no test with float 32 |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.