最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

eval的兩組性能測試數(shù)據(jù)

 更新時間:2012年08月17日 22:38:26   作者:  
最近對eval火爆的討論,教主 @Franky 和 灰大 @otakustay 也給了精彩的數(shù)據(jù)分析,剛好之前也做過類似的測試,我也跟風(fēng)湊個熱鬧,提供兩組數(shù)據(jù)供大家參考
@老趙 的一個微博“ 由eval生成的代碼效率真的很差嗎? http://t.cn/zWTUBEo 內(nèi)含人身攻擊,不喜勿入?!?
引發(fā)了最近對eval火爆的討論,教主 @Franky 和 灰大 @otakustay 也給了精彩的數(shù)據(jù)分析。
剛好之前也做過類似的測試,我也跟風(fēng)湊個熱鬧,提供兩組數(shù)據(jù)供大家參考。

更新1: 感謝灰大 @otakustay 的指導(dǎo),為排除eval('')調(diào)用本身對結(jié)果的影響,增加一組新數(shù)據(jù)A3, B3。并對舊的全部數(shù)據(jù)重測。
更新2: 感謝莫大 @貘吃饃香 的強(qiáng)力拍磚,增加了1). A4, B4;A5,B5的eval覆蓋后的測試數(shù)據(jù); 2). A6,B6 eval別名;3). A7,B7 eval.call。

測試環(huán)境:
a. 機(jī)器:Intel(R) Corei7-2720 2.2Ghz (4核心8線程)、內(nèi)存8Gb
b. OS:Windows 7 Enterprise SP1 64-bit
c. 瀏覽器:
b.1 Google Chrome 21.0.1180.79 m
b.2 Firefox 14.0.1
b.3 IE9.0.8112.16421
d. 測試方法
d.1 每個用例測試5次,耗時取最小值。
d.2 測試過程中沒有開啟Firebug或Chrome Console,開啟這些工具會使時間倍增,很難在有效時間內(nèi)得到該用例結(jié)果

用例A1:
我們在內(nèi)聯(lián)函數(shù)中調(diào)用空的eval("")
復(fù)制代碼 代碼如下:

!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2;
e = !c;
eval("");
}
for (var i = 0; i < 2999999; i++) {
func(i, i + 1, i + 2);
}
}();

用例A2:
注釋掉內(nèi)聯(lián)函數(shù)中的eval("")
復(fù)制代碼 代碼如下:

!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2;
e = !c;
//eval("");
}
for (var i = 0; i < 2999999; i++) {
func(i, i + 1, i + 2);
}
}();

用例A3:
為排除eval("")調(diào)用本身產(chǎn)生的影響,我們在外層函數(shù)中調(diào)用eval("")
復(fù)制代碼 代碼如下:

!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2;
e = !c;
}
for (var i = 0; i < 2999999; i++) {
eval("");
func(i, i + 1, i + 2);
}
}();

用例A4:
將eval()函數(shù)覆蓋成普通的空函數(shù)
復(fù)制代碼 代碼如下:

function eval(){}
!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2;
e = !c;
eval("");
}
for (var i = 0; i < 2999999; i++) {
func(i, i + 1, i + 2);
}
}();

用例A5:

同樣是函數(shù)調(diào)用,不是eval而且另一個空函數(shù)f
復(fù)制代碼 代碼如下:

function f(){}
!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2;
e = !c;
f("");
}
for (var i = 0; i < 2999999; i++) {
func(i, i + 1, i + 2);
}
}();

用例A6:
將eval賦給另一個變量f,然后調(diào)用f
復(fù)制代碼 代碼如下:

var f = eval;
!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2;
e = !c;
f("");
}
for (var i = 0; i < 2999999; i++) {
func(i, i + 1, i + 2);
}
}();

用例A7:

使用eval.call的方式去調(diào)用
復(fù)制代碼 代碼如下:

!function() {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2;
e = !c;
eval.call(null, '');
}
for (var i = 0; i < 2999999; i++) {
func(i, i + 1, i + 2);
}
}();

A組測試結(jié)果: 

A1 A2 A3 A4 A5 A6 A7 A1 : A2 A1 : A3 A1 : A4 A4 : A5
Chrome 1612ms 8ms 1244ms 897ms 7ms 718ms 680ms 201.5 1.3 1.8 128.1
Firefox 2468ms 69ms 732ms 2928ms 134ms 5033ms 4984ms 35.8 3.4 0.8 21.9
IE 1207ms 23ms 233ms 1147ms 37ms 148ms 224ms 52.5 5.2 1.0 31.0
用例B1:
復(fù)制代碼 代碼如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval("");
}();
}();
}

用例B2:
復(fù)制代碼 代碼如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
//eval("");
}();
}();
}

用例B3:
復(fù)制代碼 代碼如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
}();
}();
eval("");
}

用例B4:
復(fù)制代碼 代碼如下:

var eval = function(){}
for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval("");
}();
}();
}

用例B5:
復(fù)制代碼 代碼如下:

var f = function(){}
for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
f("");
}();
}();
}

用例B6:
復(fù)制代碼 代碼如下:

var f = eval;
for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
f("");
}();
}();
}

用例B7:
復(fù)制代碼 代碼如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval.call(null, '');
}();
}();
}

B組測試結(jié)果:
B1 B2 B3 B4 B5 B6 B7 B1 : B3 B1 : B2 B1 : B4 B4 : B5
Chrome 1569ms 134ms 1093ms 1022ms 173ms 830ms 916ms 11.7 1.4 1.5 5.9
Firefox 5334ms 1017ms 5503ms 5280ms 1171ms 6797ms 6883ms 5.2 1.0 1.0 4.5
IE 3933ms 560ms 680ms 4118ms 583ms 745ms 854ms 7.0 5.8 1.0 111.3

結(jié)論(僅限于文中的CASE):

1.  eval本身的重復(fù)調(diào)用非常耗時,即使是空的eval("");

2.  eval對內(nèi)聯(lián)函數(shù)執(zhí)行效率有所影響,依具體環(huán)境、代碼有所不同;

3.  我們可以看到無論哪種瀏覽器,無論是A組還是B組,2 和 5速度較佳。說明例中內(nèi)聯(lián)函數(shù)的eval無論以何種方式調(diào)用(即使eval被空函數(shù)覆蓋)仍會對運(yùn)行效率造成較大影響。推斷是(黑盒推斷,非權(quán)威,很可能是臆測)內(nèi)聯(lián)函數(shù)中只要發(fā)現(xiàn)eval,哪怕這個eval是被覆蓋的空函數(shù),在Scope Variables中都將會把所有的外部定義的變量等內(nèi)容初始化到當(dāng)前的Scope中。類似的,eval會對內(nèi)聯(lián)函數(shù)在運(yùn)行時JS引擎的優(yōu)化功能產(chǎn)生較大影響,降低執(zhí)行效率。

4. 說點(diǎn)題外話,雖然沒用IE10,而是IE9,在對eval的處理上,表現(xiàn)非常的優(yōu)異。IE一直被開發(fā)人員詬病,但它的飛速成長也是值得肯定的,本例就是很好的一項(xiàng)證明。 

更詳細(xì)的原因剖析下列文章描述已十分詳細(xì),不再累述。歡迎拍磚:)尤其是莫大... 

 @老趙          的 《由eval生成的代碼效率真的很差嗎?》 
 @Franky      的  《Eval科普》 
 @otakustay  的 《淺談Eval的影響》 

相關(guān)文章

  • html讀出文本文件內(nèi)容

    html讀出文本文件內(nèi)容

    html讀出文本文件內(nèi)容...
    2007-01-01
  • javascript模擬滾動條實(shí)現(xiàn)代碼

    javascript模擬滾動條實(shí)現(xiàn)代碼

    從csdn的blog上轉(zhuǎn)過來的  做了些修改,其實(shí)寫的比較糟糕(我指的是構(gòu)造) 我用的是以前的一個drag類  在這個基礎(chǔ)上在的來完成的Slider

    2010-03-03
  • JS代碼優(yōu)化技巧之通俗版(減少js體積)

    JS代碼優(yōu)化技巧之通俗版(減少js體積)

    如果你問我網(wǎng)站中最影響網(wǎng)站打開速度的是什么?我會告訴是網(wǎng)站中的javascript,簡稱JS。模板中引用的JS文件越多,打開速度越慢,這點(diǎn)我深有體會,不信你看看盧松松博客首頁,使勁優(yōu)化后依然有100K的文件
    2011-12-12
  • 使用html+js+css 實(shí)現(xiàn)頁面輪播圖效果(實(shí)例講解)

    使用html+js+css 實(shí)現(xiàn)頁面輪播圖效果(實(shí)例講解)

    下面小編就為大家?guī)硪黄褂胔tml+js+css 實(shí)現(xiàn)頁面輪播圖效果(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • JavaScript canvas實(shí)現(xiàn)七彩時鐘效果

    JavaScript canvas實(shí)現(xiàn)七彩時鐘效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)七彩時鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • javascript輕松控制表格列樣式的腳本代碼

    javascript輕松控制表格列樣式的腳本代碼

    javascript輕松控制表格列樣式的腳本代碼通過遍歷table表格元素并動態(tài)設(shè)置其class屬性,實(shí)現(xiàn)表格樣式動態(tài)控制的功能,需要的朋友可以參考一下
    2007-12-12
  • showModalDialog模態(tài)對話框的使用詳解以及瀏覽器兼容

    showModalDialog模態(tài)對話框的使用詳解以及瀏覽器兼容

    showModalDialog是jswindow對象的一個方法,和window.open一樣都是打開一個新的頁面。區(qū)別是:showModalDialog打開子窗口后,父窗口就不能獲取焦點(diǎn)了(也就是無法操作了)
    2014-01-01
  • 微信小程序?qū)崿F(xiàn)左滑動刪除效果

    微信小程序?qū)崿F(xiàn)左滑動刪除效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)左滑動刪除效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 淺談javascript中replace()方法

    淺談javascript中replace()方法

    這篇文章主要介紹了淺談javascript中replace()方法,replace函數(shù)方法是返回根據(jù)正則表達(dá)式進(jìn)行文字替換后的字符串的復(fù)制,需要的朋友可以參考下
    2015-11-11
  • 微信小程序scroll-view的滾動條設(shè)置實(shí)現(xiàn)

    微信小程序scroll-view的滾動條設(shè)置實(shí)現(xiàn)

    這篇文章主要介紹了微信小程序scroll-view的滾動條設(shè)置實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評論

宁明县| 邳州市| 炉霍县| 扬州市| 阿城市| 荔波县| 阳信县| 龙游县| 盐池县| 十堰市| 延津县| 山阴县| 胶州市| 屯留县| 原阳县| 洛南县| 青田县| 雅江县| 洛川县| 寻乌县| 平顶山市| 大同市| 广州市| 衡山县| 华宁县| 临江市| 新沂市| 象山县| 定边县| 百色市| 通榆县| 子洲县| 玉山县| 河东区| 高平市| 夹江县| 商都县| 双牌县| 西城区| 上蔡县| 剑阁县|