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/

时间: 2024-10-04 15:42:31

cocos2d-x js性能测试的相关文章

js简易函数性能测试器

如果你不想用浏览器的js性能测试工具,可以用下面这个简单的函数测试一下 function testFn(fn,param){ var start = new Date().getTime(); fn(param); var end = new Date().getTime(); console.log(fn.name+"耗时:"+(end - start)+"毫秒"); } 下面就来测试一下 var arr = []; for(var i=0;i<10000;

node.js中文资料导航

node.js中文资料导航 Node.js HomePage Infoq深入浅出Node.js系列(进阶必读) Node.js中文文档 被误解的 Node.js Node.js C++ addon编写实战系列 热门node.js模块排行榜,方便找出你想要的模块 nodejs多线程,真正的非阻塞 浅析nodejs的buffer类 利用libuv编写异步多线程的addon实例 Node.js中exports与module.exports的区别 Node.js http 管道拒绝服务漏洞 Node.j

Node.js 模块机制及常见面试问题解答

Node.js 模块机制采用了 Commonjs 规范,弥补了当前 JavaScript 开发大型应用没有标准的缺陷,类似于 Java 中的类文件,Python 中的 import 机制,Node.js 中可以通过 module.exports.require 来导出和引入一个模块. 在模块加载机制中,Node.js 采用了延迟加载的策略,只有在用到的情况下,系统模块才会被加载,加载完成后会放到 binding_cache 中. 面试指南 require的加载机制?,参考:模块加载机制 modu

前端资源教程合集

综合类 前端知识体系 前端知识结构 Web前端开发大系概览 Web前端开发大系概览-中文版 Web Front-end Stack v2.2 En类资源汇总 免费的编程中文书籍索引 前端书籍 前端免费书籍大全 前端知识体系 免费的编程中文书籍索引 智能社 - 精通JavaScript开发 重新介绍 JavaScript(JS 教程) 麻省理工学院公开课:计算机科学及编程导论 JavaScript中的this陷阱的最全收集--没有之一 JS函数式编程指南 JavaScript Promise迷你书

前端网站资源精编!!

不要吝啬你的赞美喜欢就点个赞 目录: 1-------- 走进前端2-------- jQuery3-------- CSS4-------- Angularjs5-------- ES66-------- React7-------- 移动端API8-------- avalon9-------- Requriejs10-------- vue11-------- Seajs12-------- Less,sass13-------- Markdown14-------- D315------

java parse 带英文单词的日期字符串 转 date (转化新浪微博api返回的时间)

拂晓风起 专注前端技术cocos2d.js.flash.html5,联系:[email protected].如果读者要找腾讯工作机会,请不吝推荐简历. 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 227  文章- 0  评论- 336 java parse 带英文单词的日期字符串 转 date (转化新浪微博api返回的时间) 大家一般很少格式化或者parse带有Sun Nov等英文单词的字符串. 如果格式化英文月份的字符串,记得带上Locale.US参数,否则,JRE会按照当前地区

网上搜集第三方

iOS开发-常用第三方开源框架介绍 为了了解一下目前第三方库的普及程度,下面列举一些知名App对第三方库的依赖. 网易新闻 AppleReachability ASIHTTPRequest EGOTableViewPullRefresh GTMNSString+HTML MGTemplateEngine MPOAuth RegexKitLite SDWebImage SSZipArchive wax Garageband MurmurHash libpng zlib SBJson (json-f

看着看着就哭了的前端地址大全

原文地址:http://www.w3cfuns.com/notes/16438/db8e9e0bf80676f32b2cafb9b4932313.html 综合类 | 地址--- | --- 前端知识体系|http://www.cnblogs.com/sb19871023/p/3894452.html前端知识结构|https://github.com/JacksonTian/fksWeb前端开发大系概览|https://github.com/unruledboy/WebFrontEndStack

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,