腳本應該放在頁面元素程式碼之後
無論目前JavaScript 程式碼是內嵌還是在外鏈檔案中,頁面的下載和渲染都必須停下來等待腳本執行完成。 JavaScript 執行過程耗時越久,瀏覽器等待回應使用者輸入的時間就越長。瀏覽器在下載和執行腳本時出現阻塞的原因在於,腳本可能會改變頁面或JavaScript的命名空間,它們會對後面頁面內容造成影響。
避免全域尋找
function search() { //当我要使用当前页面地址和主机域名 alert(window.location.href + window.location.host); } //最好的方式是如下这样 先用一个简单变量保存起来 function search() { var location = window.location; alert(location.href + location.host); }
#類型轉換
般最好用”" + 1来将数字转换成字符串,虽然看起来比较丑一点,但事实上这个效率是最高的,性能上来说:
(“” + ) > String() > .toString() > new String() "
" var myVar = "3.14159", str = "" + myVar, // to string num=+myVar, // to number i_int = ~ ~myVar, // to integer f_float = 1 * myVar, // to float b_bool = !!myVar, /* to boolean - any string with length and any number except 0 are true */ array = [myVar]; // to array "
多個型別宣告
在JavaScript中所有變數都可以使用單一var語句來聲明,這樣就是組合在一起的語句,以減少整個腳本的執行時間,就如上面程式碼一樣,上面程式碼格式也挺規範,讓人一看就明了。
#透過範本元素clone,替代createElementvar frag = document.createDocumentFragment(); for (var i = 0; i < 1000; i++) { var el = document.createElement('p'); el.innerHTML = i; frag.appendChild(el); } document.body.appendChild(frag); //替换为: var frag = document.createDocumentFragment(); var pEl = document.getElementsByTagName('p')[0]; for (var i = 0; i < 1000; i++) { var el = pEl.cloneNode(false); el.innerHTML = i; frag.appendChild(el); } document.body.appendChild(frag);
document.getElementById('foo').onclick = function(ev) { };
由於JavaScript是弱類型的,所以它不會做任何的自動類型檢查,所以如果看到與null進行比較的程式碼,請嘗試使用以下技術替換:
1、如果值應為一個參考類型,使用instanceof操作符檢查其建構函式2、如果值應為一個基本型別,作用typeof檢查其型別3、如果是希望對象包含某個特定的方法名,則使用typeof運算元確保指定名字的方法存在於物件上
因為JavaScript可以在任何時候修改任意對象,這樣就可以以不可預期的方式覆寫預設的行為,所以如果你不負責維護某個對象,它的對像或者它的方法,那麼你就不要對它進行修改,具體一點就是說:
1、不要為實例或原型添加屬性2、不要為實例或原型添加方法3、不要重定義已經存在的方法4、不要重複定義其它團隊成員已經實現的方法,永遠不要修改不是由你所有的對象,你可以透過以下方式為對象創建新的功能: 1、創建包含所需功能的新對象,並用它與相關對象進行交互2、創建自定義類型,繼承需要進行修改的類型,然後可以為自訂類型新增額外功能
for ( var x = 0; x < 10; x++ ) {};
縮短否定偵測
var x = 9; do { } while( x-- );
随着实例化对象数量的增加,内存消耗会越来越大。所以应当及时释放对对象的引用,让GC能够回收这些内存控件。 对象:obj = null 对象属性:delete obj.myproperty 数组item:使用数组的splice方法释放数组中不用的item
巧用||和&&布尔运算符
function eventHandler(e) { if (!e) e = window.event; } //可以替换为: function eventHandler(e) { e = e || window.event; } if (myobj) { doSomething(myobj); } //可以替换为: myobj && doSomething(myobj);
switch语句相对if较快
每条语句末尾须加分号
相关推荐:
以上是JS效能最佳化技巧實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!