閱讀了發布的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中,效率的提高是非常明顯的,但是在firefox和chrome中,差別不大。
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的效率明顯慢很多,尤其在firefox和chrome中。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
測試結果出乎意料,在ie8和chrome中,兩者的效率差不多,但是在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下的結合比較好而...