预先在JS端构造1000w组随机数据,每组数据四个数值,代表:x,y,width,height。然后将所有测试数据传入Native,确保JS和Native测试的数据是完全相同的。
var data = []; var i, t, x, y, width, height, index, start; for (i = 0; i < SIZE; i++) { x = parseInt(Math.random() * 100); y = parseInt(Math.random() * 100); width = parseInt(Math.random() * 100); height = parseInt(Math.random() * 100); data.push(x, y, width, height); }
分别在JS端和Native遍历这1000w组数据,执行Matrix.transformBounds(rect)方法以及transformBoundsNoField(x,y,width,height)函数。前者是一个类方法,执行过程会读写类实例上的属性。后者是纯数学函数,不带任何属性读写。
var index = 0; for (var i = 0; i < SIZE; i++) { var x = data[index++]; var y = data[index++]; var width = data[index++]; var height = data[index++]; rectJS.setTo(x, y, width, height); matrixJS.transformBounds(rectJS); }
var index = 0; for (var i = 0; i < SIZE; i++) { var x = data[index++]; var y = data[index++]; var width = data[index++]; var height = data[index++]; transformBoundsNoField(x, y, width, height); }
https://github.com/domchen/V8Performace