try-catch
語句放在循環外面,不要放在循環裏面,因爲異常是很少發生的,放在外面避免每次都要執行它們。甚至聖經裏都提到過這個– 不要全局的。全局變量的生命週期貫穿整個腳本的生命週期,而本地變量的存在範圍隨着本地命名空間的銷燬而消失。當在函數或其它地方引用一個全局變量時,腳本引擎需要搜索整個全局命名空間。fullName += 'John'; fullName += 'Holdings';
執行速度快於fullName += 'John'+'Holdings';
如果你需要把多個字符串連接起來,最好是把他們做成一個數組,然後調用join()方法實現這個操作。這種方式在生成HTML片段時尤其有效。對於簡單的任務,最好使用基本操作方式來實現,而不是使用函數調用實現。例如val1 < val2 ? val1 : val2;執行速度快於Math.min(val1, val2);,類似的,myArr.push(newEle);慢於myArr[myArr.length] = newEle;將函數的引用作爲參數傳遞到setTimeout()和setInterval()裏優於將函數名作爲字符串參數傳遞(硬編碼)。例如,setTimeout(”someFunc()”, 1000)執行效率慢於setTimeout(someFunc, 1000)當進行遍歷操作時避免使用DOM操作。通過像getElementsByTagName()這種方法得到的DOM元素隊列都是動態的;有可能在你還沒有對它遍歷完成時,它已經被改變。這有可能導致死循環。當你對對象的成員(屬性或方法)進行反覆操作時,先存儲對它們的引用。例如var getTags = document.getElementsByTagName; getTags(’div’);在任何的代碼段裏,在局部變量範圍外存放一個這個局部變量的引用。例如function foo(arr){
var a = ’something’;
//變量‘a’對於下面的一段就是範圍外變量,這個變量的引用在很多情況下會有用處。
for (var i = 0, j = a, loopLen = arr.length; i < loopLen; i++){
//do something
}
}
AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/json使用JavaScript壓縮工具。除了使用YUI和JSMin外,你還可以試一試Google Closure http://closure-compiler.appspot.com/home (感謝: James Westgate,一位讀者)優化每個頁面上的各種資源,把它們拆分到各個子域上,這麼它們就能夠並行下載。請參考http://yuiblog.com/blog/2007/04/11/performance-research-part-4/將CSS樣式表放在頁面的最頂端,這樣能方便包括IE在內的瀏覽器進行解析。儘量將DOM結構保持的越簡單越好。DOM的體積會影響相關的操作效率,像查找, 遍歷,DOM改動都有影響。document.getElementsByTagName(’*').length這個值越小越好。注意你使用的選擇器。例如,如果你想獲取一個
ul
下的直接子元素,使用jQuery(”ul > li”)而不要使用jQuery(”ul li”)當切換元素的可見性時(display),請記住:element.css({display:none})的速度快於element.hide() 和
element.addClass(’myHiddenClass’)。 除非在一個循環裏,我選擇element.addClass(’myHiddenClass’),這樣會使代碼更簡潔–不要使用 inline CSS 和 JavaScript。當你使用完對DOM的引用變量後,要把它置爲NULL。使用AJAX時,GET的執行效率高於POST。所以要儘量使用 GET 方式。只是要注意一點,IE只允許你用GET傳送2K的數據。小心使用腳本動畫。沒有硬件的支持,動畫會執行的很慢。儘量避免使用那些沒有實際價值的動畫效果。如果你的background-image對於這個圖片的容器太小的話,請避免使用background-repeat。如果你的背景圖片需要來回填充很多次才能充滿背景,那麼將background-repeat屬性設置成background-image 和repeat-x 或
repeat-y來達到填充背景的效果的做法是不明智的,這種填充方式的效率特別的低。你應該嘗試使用一個足夠大的圖片來做background-image並且使用background-repeat: no-repeat。佈局時不要使用<table>。 <table>在瀏覽器完全把它畫出來之前需要反覆繪製好幾次。因爲DOM中<table>是很少見的一種之後輸出的會影響之前輸出的顯示效果的元素。對於表格數據來說,你可以使用table-layout:fixed; 這是一種更有效的現實算法,根據CSS 2.1技術說明,這種寫法可以讓表格一行一行的輸出。儘可能的使用原始JavaScript。限制JavaScript框架的使用。