cocos2d-x js性能测试

闲来无事研究一下cocos2dx-lua和cocos2dx-js的性能比较,在做js性能测试的时候发现一些有趣的现象。

var calculateTime = function (name, func) {
    var times= 0, count=100;
    for(var i= 0;i<count;i++) {
        var bt = Date.now();
        func();
        var et = Date.now();
        times += et-bt;
    }
    times /= count;
    cc.log("===================================");
    cc.log(name + " use time: " + times);
    cc.log("===================================");
};

var testPlus = function () {
    for (var i = 0; i <= 100000; i++) {
        var x = i+500;
    }
};

var testMultiplication = function () {
    for (var i = 0; i <= 100000; i++) {
        var x = i * 500;
    }
};

var testDivision = function () {
    for (var i = 0; i <= 100000; i++) {
        var x = i / 500;
    }
};

var testMax = function () {
    for (var i = 0; i <= 100000; i++) {
        var x = Math.max(i,500);
    }
};

var testMax2 = function () {
    for (var i = 0; i <= 100000; i++) {
        var x = i>500?i:500;
    }
};

var testDisplacement = function () {
    for (var i = 0; i <= 100000; i++) {
        var x = i/1000;
    }
};

var testDisplacement2 = function () {
    for (var i = 0; i <= 100000; i++) {
        var x = i>>10;
    }
};

calculateTime("testPlus", testPlus);
calculateTime("testMultiplication", testMultiplication);
calculateTime("testDivision", testDivision);
calculateTime("testMax", testMax);
calculateTime("testMax2", testMax2);
calculateTime("testDisplacement", testDisplacement);
calculateTime("testDisplacement2", testDisplacement2);

输出为:

JS: ===================================
JS: testPlus use time: 4.77
JS: ===================================
JS: ===================================
JS: testMultiplication use time: 4.76
JS: ===================================
JS: ===================================
JS: testDivision use time: 4.68
JS: ===================================
JS: ===================================
JS: testMax use time: 12.48
JS: ===================================
JS: ===================================
JS: testMax2 use time: 5.4
JS: ===================================
JS: ===================================
JS: testDisplacement use time: 4.81
JS: ===================================
JS: ===================================
JS: testDisplacement2 use time: 4.75
JS: ===================================

比较好奇2个问题,第一,是为什么Math.max会如此的消耗性能,第二,为什么移位运算不比除法运算快?

关于第一个的问题,我进而在测试了一下:

var max = function(x, y) {
    return x>y?x:y;
};

var testMax3 = function () {
    for (var i = 0; i <= 100000; i++) {
        var x = max(i, 500);
    }
};

结果是:

JS: ===================================
JS: testMax3 use time: 15.34
JS: ===================================

看来时间主要是耗费在函数调用上。

 

然后,关于第二个问题,查一下资料发现,js计算使用双精度浮点数,若要进行位运算,需要转换成整型,再进行运算,导致效率下降,似乎这个是常识 = =

附上一些链接:

http://www.ruanyifeng.com/blog/2010/01/12_javascript_syntax_structures_you_should_not_use.html

http://jerryzou.com/posts/do-you-really-want-use-bit-operators-in-JavaScript/

转载于:https://www.cnblogs.com/jasonzxx/p/4896219.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值