码迷,mamicode.com
首页 > Web开发 > 详细

cocos2d-x js性能测试

时间:2015-10-20 22:44:25      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:

闲来无事研究一下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/

cocos2d-x js性能测试

标签:

原文地址:http://www.cnblogs.com/jasonzxx/p/4896219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!