前端開發,要學會吝嗇:
- 吝嗇你的代碼,用最少的代碼做最合適的事情;
比如你的代碼中用到了很多document.getElementById(),你是否考慮寫一個簡單的ID選取器。
function $(Id){ return document.getElementById(Id);}
- 吝嗇你的補丁,不要為了實現功能在現有架構上打補丁,而是架構擴充上寫實現,如果架構不能擴充,是否考慮部分重構?
比如你已經擁有一套完整的表單正則驗證架構,某天你發現某個表單在嚴重架構裡找不到對應的正則,你可能的做法是追加一個if就能簡單的實現,可為何不在驗證架構裡面擴充一個正則,保持代碼的乾淨呢?
- 吝嗇代碼執行的步驟
比如我們在寫ajax代碼時,我們經常寫如下的代碼:
var xmlObject;function createXMLHTTPRequest(){if(window.ActiveXObject){ xmlObject = new ActiveObject("Microsoft.XMLHTTP"); }else{ xmlObject = new XMLHTTPRequest(); }}
但我們每產生一次對象就要進行一次判斷,為何不在第一次產生對象後記憶下來,下次直接new呢?改進後如下:
var _ajax = function(){ _self = this;}_ajax.prototype = { /** * 構建http請求對象 */ _create: function(){ var factories = [function(){return new XMLHttpRequest();},//非IE系列function(){return new ActiveXObject("Microsoft.XMLHTTP");},//IEfunction(){return new ActiveXObject("Msxml2.XMLHTTP");}//IE某些版本]; for (var i = 0; i < factories.length; i++) { try { if (factories[i]()) { return factories[i]; } } catch (e) { continue; } } return factory[2]; }(),}
這段代碼看起來視乎比上面執行步驟多很多,但當第一次調用_ajax._create()後,_ajax._create已經被改變成一個相容當前瀏覽器的匿名函數,以後的調用都不再會做判斷。