關(guān)于js日期轉(zhuǎn)化為毫秒數(shù)“節(jié)省20%的效率和和節(jié)省9個(gè)字符“問(wèn)題
更新時(shí)間:2012年03月01日 22:38:12 作者:
最近在看松散耦合可定制百度的開(kāi)源框架tangram.js目光突然就聚焦在一種獲得毫秒數(shù)的寫(xiě)法
最近在看松散耦合可定制百度的開(kāi)源框架tangram.js目光突然就聚焦在一種獲得毫秒數(shù)的寫(xiě)法:
(+new Date())
其實(shí)這種寫(xiě)法也沒(méi)什么就是用運(yùn)算符轉(zhuǎn)化日期為number型,于是我肯定這種寫(xiě)法沒(méi)有日期原生寫(xiě)法(new Date().getTime())效率高 :
于是做了下面測(cè)試:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>關(guān)于Date轉(zhuǎn)化成毫秒數(shù)的測(cè)試</title>
<style type="text/css">
<!--
body{font-size:12px;}
table{border-top:1px solid #dfdfdf;border-right:1px solid #dfdfdf;}
th,td{padding:5px;text-align:center;}
th{background:#444;color:#fff;}
td{border-left:1px solid #dfdfdf;border-bottom:1px solid #dfdfdf;}
//-->
</style>
</head>
<body>
<script language="javascript" type="text/javascript">
// <![CDATA[
(function () {
var bank=function(){};
var d1,d2,d3,temp;
var d1=new Date();
for(var i=0;i<1000000;i++){
temp=new Date().getTime();
}
var d2=new Date();
for(var i=0;i<1000000;i++){
temp=(+new Date());
}
var d3=new Date();
//打印
document.write('第一次循環(huán)所用時(shí)間:'+(d2-d1)+'<br/>第一次循環(huán)所用時(shí)間:'+(d3-d2));
})();
// ]]>
</script>
</body>
</html>
分別循環(huán)一百萬(wàn)次次后在不同瀏覽器的結(jié)果如下:
IE6:
第一次循環(huán)所用時(shí)間:3406
第一次循環(huán)所用時(shí)間:5313
IE7:
第一次循環(huán)所用時(shí)間:3594
第一次循環(huán)所用時(shí)間:5000
IE8:
第一次循環(huán)所用時(shí)間:2735
第一次循環(huán)所用時(shí)間:3453
chrome:
第一次循環(huán)所用時(shí)間:210
第一次循環(huán)所用時(shí)間:337
opera\safari\firefox
基本上相差 100ms,但仍是最后一種慢
結(jié)論:證明我是正確的+new Date()寫(xiě)法比new Date().getTime()效率低,原因進(jìn)行了類(lèi)型轉(zhuǎn)化,通常我們常用的數(shù)量級(jí)(一萬(wàn)次以?xún)?nèi))不是很大,所以在個(gè)瀏覽器幾乎不用考慮執(zhí)行效率的問(wèn)題,所以第一種寫(xiě)法用起來(lái)計(jì)較好,還節(jié)省了9個(gè)字符。當(dāng)用js游戲開(kāi)發(fā)時(shí),當(dāng)用到大數(shù)量級(jí)的時(shí),建議原生寫(xiě)法??梢蕴岣?0%效率。
(+new Date())
其實(shí)這種寫(xiě)法也沒(méi)什么就是用運(yùn)算符轉(zhuǎn)化日期為number型,于是我肯定這種寫(xiě)法沒(méi)有日期原生寫(xiě)法(new Date().getTime())效率高 :
于是做了下面測(cè)試:
復(fù)制代碼 代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>關(guān)于Date轉(zhuǎn)化成毫秒數(shù)的測(cè)試</title>
<style type="text/css">
<!--
body{font-size:12px;}
table{border-top:1px solid #dfdfdf;border-right:1px solid #dfdfdf;}
th,td{padding:5px;text-align:center;}
th{background:#444;color:#fff;}
td{border-left:1px solid #dfdfdf;border-bottom:1px solid #dfdfdf;}
//-->
</style>
</head>
<body>
<script language="javascript" type="text/javascript">
// <![CDATA[
(function () {
var bank=function(){};
var d1,d2,d3,temp;
var d1=new Date();
for(var i=0;i<1000000;i++){
temp=new Date().getTime();
}
var d2=new Date();
for(var i=0;i<1000000;i++){
temp=(+new Date());
}
var d3=new Date();
//打印
document.write('第一次循環(huán)所用時(shí)間:'+(d2-d1)+'<br/>第一次循環(huán)所用時(shí)間:'+(d3-d2));
})();
// ]]>
</script>
</body>
</html>
分別循環(huán)一百萬(wàn)次次后在不同瀏覽器的結(jié)果如下:
IE6:
第一次循環(huán)所用時(shí)間:3406
第一次循環(huán)所用時(shí)間:5313
IE7:
第一次循環(huán)所用時(shí)間:3594
第一次循環(huán)所用時(shí)間:5000
IE8:
第一次循環(huán)所用時(shí)間:2735
第一次循環(huán)所用時(shí)間:3453
chrome:
第一次循環(huán)所用時(shí)間:210
第一次循環(huán)所用時(shí)間:337
opera\safari\firefox
基本上相差 100ms,但仍是最后一種慢
結(jié)論:證明我是正確的+new Date()寫(xiě)法比new Date().getTime()效率低,原因進(jìn)行了類(lèi)型轉(zhuǎn)化,通常我們常用的數(shù)量級(jí)(一萬(wàn)次以?xún)?nèi))不是很大,所以在個(gè)瀏覽器幾乎不用考慮執(zhí)行效率的問(wèn)題,所以第一種寫(xiě)法用起來(lái)計(jì)較好,還節(jié)省了9個(gè)字符。當(dāng)用js游戲開(kāi)發(fā)時(shí),當(dāng)用到大數(shù)量級(jí)的時(shí),建議原生寫(xiě)法??梢蕴岣?0%效率。
相關(guān)文章
js中格式化日期時(shí)間型數(shù)據(jù)函數(shù)代碼
js中格式化日期時(shí)間型數(shù)據(jù)函數(shù)代碼,需要的朋友可以參考下。2010-11-11
JS中處理與當(dāng)前時(shí)間間隔的函數(shù)代碼
因?yàn)楣ぷ餍枰粋€(gè)JS處理時(shí)間的函數(shù),參考網(wǎng)上的一些東東,根據(jù)實(shí)際需要寫(xiě)了一個(gè),記錄在這里,方便需要的朋友2012-05-05
一個(gè)簡(jiǎn)單橫向javascript日期控件
2007-12-12
實(shí)現(xiàn)javascript的延期執(zhí)行或者重復(fù)執(zhí)行的兩個(gè)函數(shù)
實(shí)現(xiàn)javascript的延期執(zhí)行或者重復(fù)執(zhí)行的兩個(gè)函數(shù)...2007-06-06
Javascript倒計(jì)時(shí)頁(yè)面跳轉(zhuǎn)實(shí)例小結(jié)
在js中實(shí)現(xiàn)頁(yè)面定時(shí)跳轉(zhuǎn)我們要使用setInterval或setTimeOut函數(shù),當(dāng)然還可以使用頁(yè)面的meta實(shí)現(xiàn)了,下面使用js實(shí)現(xiàn)的幾個(gè)代碼2013-09-09

