javascript效能最佳化

來源:互聯網
上載者:User

標籤:rip   str   get   自訂   重要   invalid   upd   沒有   比較   

1、尊重對象所有權

? 不要為執行個體或原型添加屬性;
? 不要為執行個體或原型添加方法;
? 不要重定義已存在的方法。

 最佳的方法便是永遠不修改不是由你所有的對象。所謂擁有對象,就是說這個對象是你建立的,比如你自己建立的自訂類型或對象字面量。而 Array 、 document 這些顯然不是你的,它們在你的代碼執行前就存在了。

 

2、避免全域變數

最多建立一個全域變數,讓其他對象和函數存在其中。請看以下例子:

//兩個全域量——避免!!var name = "Nicholas";function sayName(){alert(name);}

這段程式碼封裝含了兩個全域量:變數 name 和函數 sayName() 。其實可以建立一個包含兩者的對象,如下例所示:

//一個全域量——推薦var MyApplication = {name: "Nicholas",sayName: function(){alert(this.name);}};

 

3、避免與 null 進行比較

? 如果值應為一個參考型別,使用 instanceof 操作符檢查其建構函式;
? 如果值應為一個基本類型,使用 typeof 檢查其類型;
? 如果是希望對象包含某個特定的方法名,則使用 typeof 操作符確保指定名字的方法存在於對象上。

 

4、使用常量

儘管 JavaScript 沒有常量的正式概念,但它還是很有用的。這種將資料從應用邏輯分離出來的思想,可以在不冒引入錯誤的風險的同時,就改變資料。請看以下例子:

var Constants = {INVALID_VALUE_MSG: "Invalid value!",INVALID_VALUE_URL: "/errors/invalid.php"};function validate(value){if (!value){alert(Constants.INVALID_VALUE_MSG);location.href = Constants.INVALID_VALUE_URL;}}

 

5、避免全域尋找

可能最佳化指令碼效能最重要的就是注意全域尋找。使用全域變數和函數肯定要比局部的開銷更大,因為要涉及範圍鏈上的尋找。請看以下函數:

function updateUI(){var imgs = document.getElementsByTagName("img");for (var i=0, len=imgs.length; i < len; i++){imgs[i].title = document.title + " image " + i;}var msg = document.getElementById("msg");msg.innerHTML = "Update complete.";}

該函數可能看上去完全正常,但是它包含了三個對於全域 document 對象的引用。如果在頁面上有多個圖片,那麼 for 迴圈中的 document 引用就會被執行多次甚至上百次,每次都會要進行範圍鏈尋找。通過建立一個指向 document 對象的局部變數,就可以通過限制一次全域尋找來改進這個函數的效能:

function updateUI(){var doc = document;var imgs = doc.getElementsByTagName("img");for (var i=0, len=imgs.length; i < len; i++){imgs[i].title = doc.title + " image " + i;}var msg = doc.getElementById("msg");msg.innerHTML = "Update complete.";}

這裡,首先將 document 對象存在本地的 doc 變數中;然後在餘下的代碼中替換原來的 document 。與原來的的版本相比,現在的函數只有一次全域尋找,肯定更快。

 

6、效能的其他注意事項

? 原生方法較快——只要有可能,使用原生方法而不是自己用 JavaScript 重寫一個。原生方法是用諸如 C/C++之類的編譯型語言寫出來的,所以要比 JavaScript 的快很多很多。JavaScript 中最容易被忘記的就是可以在 Math 對象中找到的複雜的數學運算;這些方法要比任何用 JavaScript 寫的同樣方法如正弦、餘弦快的多。
? Switch 語句較快 —— 如果有一系列複雜的 if-else 語句,可以轉換成單個 switch 語句則可以得到更快的代碼。還可以通過將 case 語句按照最可能的到最不可能的順序進行組織,來進一步最佳化 switch 語句。
? 位元運算符較快 —— 當進行數學運算的時候,位元運算操作要比任何布爾運算或者算數運算快。選擇性地用位元運算替換算數運算可以極大提升複雜計算的效能。諸如模數,邏輯與和邏輯或都可以考慮用位元運算來替換。

javascript效能最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.