一行代碼加速IE的javascript的方法

將下列代碼加在JavaScript的最前面

/*@cc_on_d=document;eval('var document=_d')@*/

 

加入這樣的一行代碼IEdocument的訪問速度至少可以提高5倍以上

下面是加入前和加入後的測試比較代碼

// Before

var date = new Date;

for (var i = 0; i < 100000; i++) document;

alert(new Date - date); // 643

 

/*@cc_on_d=document;eval('var document=_d')@*/

 

// After

date = new Date;

for (var i = 0; i < 100000; i++) document;

alert(new Date - date); // 145

 

速度提高了不少吧!

 

解說:

首先,IEdocument就這樣直接被調用的話被執行的是window 對象的內部函數,而這個比較低效的。根據這一點,下面的處理可以提高速度:

var doc = document;

 

document; //

doc; // 這個比上面的(document)快

 

雖然像上面那麼寫可以直接使用,但是之前用到document的地方都要去替換,這個有點麻煩了點吧。所以,看下面的:

var doc = document;

var document = doc;

可以實現的話那就太好了……

 

瞭解JavaScript的人應該知道,JavaScript的變量是在最開始的時候就生成的,所以這裏的document就變成了undefined了。

沒關係,繼續改進~

var doc = document;

eval('var document = doc');

 

eval的作用就是在作用域範圍內改變變量,這樣的話,後面的document就可以被正常使用了。

最後,加上只有在IE內有效的條件,就像下面這樣就可以了~

/*@cc_on

var doc = document;

eval('var document = doc');

@*/

 

舉一反三,像下面這樣的寫法,document以外的全局變量也可以用上面的方法,起到加速的作用。

/*@cc_on

eval((function(props) {

var code = [];

for (var i = 0 l =props.length;i<l;i++){

var prop = props[i];

window['_'+prop]=window[prop];

code.push(prop+'=_'+prop)

}

return 'var '+code.join(',');

})('document self top parentalert setInterval clearInterval

setTimeout clearTimeout'.split('')));

@*/

 轉自:http://blog.minidx.com/2007/10/15/13.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章