对各个挑战代码的性能测试和功能分析

自2010-06-05起本人将连续把各个挑战代码的测试数据公布出来,欢迎网友帮助测试,并实施监督。

关于测试,我声明以下几点:

1.以下测试的操作系统是WindowsXP。

2.函数的执行次数默认1000000次。

3.一般先用Firefox测试3次,如果性能差距很明显,即以Firefox 的为准。 如果性能旗鼓相当,再在Internet Explorer 和 Chrome中进行测试。如果性能再次旗鼓相当,提高函数的执行次数一个数量级,并重新测试。

4.由于硬件和软件的配置不一样,各位网友的测试数据未必和我的测试数据是一致的。但是,结论--即程序代码的优劣--应当一致的。如果网友的结论与我的不一致,请告诉我,我将重新测试。

5.欢迎Javascript爱好者帮助测试监督。感谢各位的支持!

 



 

 /******
 * name: 江、
 * qq: 676596050
 * blog: http://hi.baidu.com/jiang_yy_jiang
 */

 

/*测试时间:2010-06-05, 系统:windowsXP sp3+firefox*/

 

function GetColor() { var str = "0123456789abcdef", t = ""; for (j = 0; j < 6; j++) { t = t + str.charAt(Math.random() * str.length); } return t; }
函数执行1000000次: (2575 ms +2843 ms +2590 ms)/3=2669.3 ms


function randomColor_fu() { var color = "00000" + Math.round(Math.random() * 16777215).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (1181 ms +1169 ms+1183 ms)/3=1177.7 ms

 


 

 

/****
* name:shelly→水
* qq:49812643
* blog:
*/

/*测试时间:2010-06-05, 系统:windowsXP sp3+firefox*/

function randomColor_shelly() { return "rgb(" + Math.round(Math.random() * 256) + "," + Math.round(Math.random() * 256) + "," + Math.round(Math.random() * 256) + ")"; }
函数执行1000000次: (3088 ms+3246 ms+3238 ms)/3=3190.7 ms


function randomColor_fu() { var color = "00000" + Math.round(Math.random() * 16777215).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (1202 ms+1201 ms+1187 ms)/3=1196.7 ms

 

 


 

 

/****
* name:我佛山人
* qq:52739105
* blog:
*/

/*测试时间:2010-06-05, 系统:windowsXP sp3+firefox*/

function randomColor_foshan() { return (new Date).getTime().toString(16).substr(-6); }
函数执行1000000次: (3173 ms+2890 ms+3088 ms)/3=3050.3 ms

function randomColor_fu() { var color = "00000" + Math.round(Math.random() * 16777215).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (1208 ms + 1201 ms +1191 ms)/3=1200 ms

 

 


 

 

/****
* name:匿名 //见http://blog.csdn.net/FuDesign2008/archive/2010/06/03/5645996.aspx第二个评论
* qq:
* blog:
*/

/*测试时间:2010-06-05, 系统:windowsXP sp3+firefox*/

function randomColor_noName_1() { return "rgb(" + [Math.random() * 256 | 0, Math.random() * 256 | 0, Math.random() * 256 | 0].join(",") + ")"; }
函数执行1000000次: (6205 ms + 6104 ms + 6124 ms)/3=6144.3

function randomColor_fu() { var color = "00000" + Math.round(Math.random() * 16777215).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (1161 ms + 1201 ms + 1215 ms)/3=1192.3

 

 


 

 

    /****
     * name:角蝰er
     * qq:16198008
     * blog:http://www.zerolone.com
     */
    function randomColor_zerolone(){
        return Math.random().toString(16).substring(2, 8);
    }

 

昨天的测试结论是,除了在firefox下 randomColor_zerolone(){...}性能不如 randomColor_fu(){...}(但彼此相差很小),在IE和Chrome下性能都比randomColor_fu(){...}优秀很多,基于此我昨天差点要送出第一本<<Javascript: The Definitive Guide>>。

治方(zm)(QQ:15586293)指出这个程序存在缺陷,因为Math.random()的值域是[0,1),因此,该程序存在不能返回6个字符的可能。

而角蝰er又对程序进行了修正,故今天不再做测试。

感谢治方(zm)深厚的知识及分析能力,同时向角蝰er表达我的歉意!

 

 


 

 

/****
 * name:治方(zm)
 * qq:15586293
 * blog:
 */
/*测试时间:2010-06-05, 系统:windowsXP sp3+firefox*/

function randomColor_zm() { var color = Math.round(Math.random() * 16777215).toString(16); color == 0 && (color = "000000"); return color; }
函数执行1000000次: (730 ms + 725 ms + 721 ms) = 725.3 ms

治方(zm)的代码性能是非常高的,但是存在功能性的不足:有时不能返回6个字符。
...
3ae244
2b96b5
61bc22
f86de    //不是6个
d446c5
9dd71   //不是6个
f43796
8fb71e
6bd1a2
19c97a
11591    //不是6个
502bee
81d792
...
有兴趣的朋友可以自己亲自测试一下。

 

 


 

 

/****
* name:我佛山人
* qq:52739105
* blog:
*/

/*测试时间:2010-06-05, 系统:windowsXP sp3+firefox*/

function randomColor_foshan_2() { return ((new Date).getTime() & 16777215).toString(16); }
函数执行1000000次:(1525 ms + 1499 ms + 1502 ms)/3 = 1508 ms
 
function randomColor_fu() { var color = "00000" + Math.round(Math.random() * 16777215).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (1189 ms + 1200 ms + 1204 ms)/3 = 1197 ms

/*测试时间:2010-06-05, 系统:windowsXP sp3 + IE7 */
function randomColor_foshan_2(){ return (new Date().getTime() & 0xffffff).toString(16); }
函数执行1000000次: (11250 ms + 11219 ms + 11203 ms) /3= 11224 ms

function randomColor_fu(){ var color = "00000" + Math.round(Math.random() * 0xffffff).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (11953 ms + 12000 ms + 11907 ms) /3 = 11953 ms

/*测试时间:2010-06-05, 系统:windowsXP sp3 + Chrome 4.1 */
function randomColor_foshan_2(){ return (new Date().getTime() & 0xffffff).toString(16); }
函数执行1000000次: (1337 ms + 1354 ms +1283 ms)/3= 1324 ms

function randomColor_fu(){ var color = "00000" + Math.round(Math.random() * 0xffffff).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (1314 ms + 1309 ms + 1313 ms)/3=1312 ms

/*提高一个数量级*/

/*测试时间:2010-06-05, 系统:windowsXP sp3 + Firefox */
//弹出“停止脚本”还是“继续”的对话框一次, 无法测

/*测试时间:2010-06-05, 系统:windowsXP sp3 + IE7 */
//老是弹出“是否停止运行此脚本?”的对话框, 无法测

/*测试时间:2010-06-05, 系统:windowsXP sp3 + Chrome 4.1 */
function randomColor_foshan_2(){ return (new Date().getTime() & 0xffffff).toString(16); }
函数执行10000000次: (12710 ms + 12735 ms + 12742 ms) /3 = 12729 ms

function randomColor_fu(){ var color = "00000" + Math.round(Math.random() * 0xffffff).toString(16); return color.substring(color.length - 6); }
函数执行10000000次: (12544 ms + 12578 ms + 12579 ms) / 3= 12567 ms

/*从测试的数据可以看出,在性能上 randomColor_foshan_2(){...} 与randomColor_fu(){...} 旗鼓相当。
1.  randomColor_foshan_2(){...} 与 randomColor_fu(){...} 还需要继续测试,希望有更好的测试方法, 希望各位网友帮我想想好方法?
2.  还有一个疑问 : 在什么特定的Date情况下, randomColor_foshan_2() {...}返回的值是6个0
*/

 

/*
//功能分析  2010-06-06
randomColor_foshan_2(){...} 存在功能缺陷(或者说bug), 具体的缺陷测试见:
http://blog.csdn.net/FuDesign2008/archive/2010/06/06/5651139.aspx
欢迎各位javascript爱好者提出异议或质疑。   
*/

 

 

 


 

 

/****
 * name:角蝰er
 * qq:16198008
 * blog:http://www.zerolone.com
 */

/*测试时间:2010-06-06, 系统:windowsXP sp3+firefox*/

function randomColor_zerolone_2() { return (Math.random() + 1e-8).toString(16).substring(2, 8); }
函数执行1000000次: (2895 ms + 2901 ms + 2898 ms)/3= 2898 ms

function randomColor_fu() { var color = "00000" + Math.round(Math.random() * 16777215).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (1228 ms + 1186 ms + 1235 ms)/3= 1216.3 ms

/*测试时间:2010-06-06, 系统:windowsXP sp3 + IE7*/

function randomColor_zerolone_2(){ return (Math.random() + 0.00000001).toString(16).substring(2, 8); }
函数执行1000000次: (9641 ms + 9688 ms + 9703 ms) / 3  = 9677.3 ms

function randomColor_fu(){ var color = "00000" + Math.round(Math.random() * 0xffffff).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (12062 ms + 12047 ms + 12063 ms) / 3 = 12057.3 ms

/*测试时间:2010-06-05, 系统:windowsXP sp3 + Chrome 4.1 */

function randomColor_zerolone_2(){ return (Math.random() + 0.00000001).toString(16).substring(2, 8); }
函数执行1000000次: (1142 ms + 1209 ms + 1210 ms)/3 = 1187 ms

function randomColor_fu(){ var color = "00000" + Math.round(Math.random() * 0xffffff).toString(16); return color.substring(color.length - 6); }
函数执行1000000次: (1354 ms + 1312 ms + 1318 ms)/3 = 1328 ms

/*从测试的数据可以看出,
1. 在firefox下, randomColor_zerolone_2 性能不如randomColor_fu;
2. 在IE 和 Chrome 下, randomColor_zerolone_2 性能都比randomColor_fu优秀。

为了谨慎,在接下来的时间里, 我会对 randomColor_zerolone_2 进行功能分析。
同时希望 角蝰er 能否对 randomColor_zerolone_2 进行优化, 使得在firefox下也比randomColor_fu性能优秀。
*/

 

/*

2010-06-11

个人对randomColor_zerolone_2进行功能分析,没有发现什么问题。

欢迎各位javascript爱好者对randomColor_zerolone_2进行功能分析, 如发现缺陷,麻烦你将缺陷指出,并发送至FuDesign2008@163.com。

*/

 

 


 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值