對《30個提高Web程式執行效率的好經驗》的理解

2021-08-30 19:12:01 字數 4730 閱讀 9093

閱讀了發布的it文章《30

個提高web

程式執行效率的好經驗

》,這30條準則對我們web開發是非常有用的,不過大家可能對其中的一些準則是知其然而不知其所以然。

頁面測試環境:

os:vista;

processor:3.40ghz;

memory: 2.00gb;

system type: 32-bit operating system;

browser: ie8, forefox 3.5.7, chrome4.0.249

我們可以用如下的**進行測試:

function testinnerhtml()

div1.innerhtml = buf.join('');

document.getelementbyid('divshowtime1').innerhtml = '耗時1:' +  (new date() - starttime) + 'ms';

div1.innerhtml = ""; }

function testcreateelement()

document.getelementbyid('divshowtime2').innerhtml = '耗時2:' +  (new date() - starttime) + 'ms';

div1.innerhtml = ""; }

測試結果:

ie8firefox

chrome 1

耗時1:134ms

耗時2:857ms

耗時1:570ms

耗時2:658ms

耗時1:61ms

耗時2:47ms 2

耗時1:131ms

耗時2:846ms

耗時1:474ms

耗時2:610ms

耗時1:58ms

耗時2:48ms 3

耗時1:131ms

耗時2:927ms

耗時1:673ms

耗時2:674ms

耗時1:57ms

耗時2:49ms 4

耗時1:132ms

耗時2:846ms

耗時1:540ms

耗時2:686ms

耗時1:55ms

耗時2:46ms

測試結果顯示使用innerhtml對比方法,在ie8中,效率的提高是非常明顯的,但是在firefoxchrome中,差別不大。

2. eval()有問題,new fuction()建構函式也是,盡量避免使用它們。

eval方式比直接呼叫方式多了一步解析的過程,所以盡量避免使用它,如果必須用它,則最好是把呼叫的**包裝到函式中,然後eval這個函式,這樣減少了解析的時間。eval函式的效率,我們可以用如下的**測試:

function testnoeval()

var endtime = new date();

document.getelementbyid('divshowtime1').innerhtml = '耗時1:' +  (endtime - starttime) + 'ms'; }

function testeval() ");

var endtime = new date();

document.getelementbyid('divshowtime2').innerhtml = '耗時2:' +  (endtime - starttime) + 'ms'; }

測試結果:

ie8firefox

chrome 1

耗時1:85ms

耗時2:251ms

耗時1:2ms

耗時2:203ms

耗時1:1ms

耗時2:340ms 2

耗時1:82ms

耗時2:251ms

耗時1:2ms

耗時2:204ms

耗時1:2ms

耗時2:344ms 3

耗時1:81ms

耗時2:250ms

耗時1:2ms

耗時2:205ms

耗時1:1ms

耗時2:338ms 4

耗時1:82ms

耗時2:251ms

耗時1:2ms

耗時2:213ms

耗時1:2ms

耗時2:344ms

測試發現,eval的效率明顯慢很多,尤其在firefoxchrome中。new fuction的執行原理和eval類似,所以效率也是不高。

3. 拒絕使用with語句。它會導致當你引用這個變數時去額外的搜尋這樣的乙個命名空間,with裡的**在編譯時期是完全未知的。

原因明確,不過使用with語句,**會非常簡潔,我個人還是經常使用這個語句的。

4. 使用for()迴圈替代for…in迴圈。因為for…in迴圈在開始迴圈之前需要script引擎建立乙個含有所有可迴圈屬性的list,需要多檢查一次。

原因明確,沒有補充。

5. 把try-catch語句放在迴圈外面,不要放在迴圈裡面,因為異常是很少發生的,放在外面避免每次都要執行它們。

原因明確,這是我認為使用任何語言都有必要遵守的準則。

6. 甚至聖經裡都提到過這個– 不要全域性的。全域性變數的生命週期貫穿整個指令碼的生命週期,而本地變數的存在範圍隨著本地命名空間的銷毀而消失。當在函式或其它地方引用乙個全域性變數時,指令碼引擎需要搜尋整個全域性命名空間。

防止記憶體洩漏和提高查詢解析速度,另外,變數定義在最小使用範圍內,**的可讀性好。

7. fullname += 'john'; fullname += 'holdings';執行速度快於fullname += 'john' + 'holdings';

還是採用測試**:

function teststring1()

var endtime = new date();

document.getelementbyid('divshowtime1').innerhtml = '耗時1:' +  (endtime - starttime) + 'ms'; }

function teststring2()

var endtime = new date();

document.getelementbyid('divshowtime2').innerhtml = '耗時2:' +  (endtime - starttime) + 'ms'; }

測試結果:

ie8

firefox

chrome 1

耗時1:492ms

耗時2:477ms

耗時1:151ms

耗時2:7ms

耗時1:52ms

耗時2:51ms 2

耗時1:532ms

耗時2:456ms

耗時1:150ms

耗時2:7ms

耗時1:50ms

耗時2:51ms 3

耗時1:493ms

耗時2:454ms

耗時1:148ms

耗時2:7ms

耗時1:53ms

耗時2:50ms 4

耗時1:491ms

耗時2:466ms

耗時1:204ms

耗時2:8ms

耗時1:51ms

耗時2:50ms

測試結果出乎意料,在ie8chrome中,兩者的效率差不多,但是在firefox中,第一種寫法反而比第二種慢很多。ie6下測試也是如此,看來這條規則還有待進一步研究。

8. 如果你需要把多個字串連線起來,最好是把他們做成乙個陣列,然後呼叫join()方法實現這個操作。這種方式在生成html片段時尤其有效。

驗證還是用測試**:

function testnojoin()

function testjoin()

測試結果:

ie8

30條技巧提高Web程式執行效率

eval 有問題,new fuction 建構函式也是,盡量避免使用它們。拒絕使用with語句。它會導致當你引用這個變數時去額外的搜尋這樣的乙個命名空間,with裡的 在編譯時期是完全未知的。使用for 迴圈替代for in循 環。因為for in迴圈在開始迴圈之前需要script引擎建立乙個含有所...

對提高ASP執行效率的幾點看法

對提高asp執行效率的幾點看法 1 硬體問題 伺服器的設定和配置無疑是asp執行速度的最主要決定因素,但有關這方面的問題與mimi有關,無需羅嗦。2 避免在乙個頁面中是用多種指令碼語言 如 和因為如果在指令碼中混用多種指令碼語言,則伺服器不得不載入多個指令碼引擎,逐個解釋,這勢必會影響指令碼執行的效...

ASP開發 如何提高WEB程式的效率

很多非常不喜歡用asp來程式設計,他們總是抱怨說asp程式太慢,效率太低。更希望用php,jsp等來寫程式。其實不能從 認為 這個角度來看問題 而應該從實際中看問題,asp真的很慢的嗎,那麼微軟的站為何用asp也不慢呢?php真的很快嗎,其實它也仍然是解釋性的語言。只不過在linux下的結合比較好而...