高程之最佳實(shí)踐

1、可維護(hù)性

  • 可理解性坏瞄、
  • 直觀性桂对、
  • 可適應(yīng)性、
  • 可擴(kuò)展性惦积、
  • 可調(diào)式性

1.1 代碼約定:

1. 可讀性:

一般來說和代碼格式有關(guān)系
需要添加注釋的地方:

  • 函數(shù)和方法:每個(gè)函數(shù)或者是方法都應(yīng)該包含一個(gè)注釋,描述其目的和用于完成任務(wù)所有可能使用的算法猛频,參數(shù)代表什么以及函數(shù)是否有返回值
  • 大段代碼:用于完成單個(gè)任務(wù)的多行代碼應(yīng)該在前邊放一個(gè)描述任務(wù)的注釋
  • 復(fù)雜的算法:如果使用一種獨(dú)特的方式解決莫個(gè)問題狮崩,要注意注釋中解釋你是如何做的
  • Hack :

2 變量和函數(shù)命名:

  • 變量名為名詞:car person
  • 函數(shù)名以動(dòng)詞開頭: getName 返回boolean的函數(shù)以is開頭
  • 變量函數(shù)都要合乎邏輯,不要擔(dān)心長度

3 變量類型透明

第一種方式是:初始化鹿寻;
var found = false;
第二種方法是匈牙利標(biāo)記發(fā)來指定變量類型睦柴。匈牙利在變量名之前加一個(gè)或多個(gè)字符來表示數(shù)據(jù)類型。
var bFound;//boolean
var iCount;//int
第三種 類型注釋:
var found /:Boolean/ = false;

1.2 松散耦合

只要某個(gè)部分的代碼過于依賴另一個(gè)部分毡熏,代碼就是耦合過緊坦敌,難于維護(hù)

對(duì)象直接引用另一個(gè)對(duì)象,并且當(dāng)修改其中一個(gè)的同時(shí)痢法,需要修改另外一個(gè)狱窘,緊密的耦合的軟件難于維護(hù)需要經(jīng)常重寫

1、解耦html/javascript
分開來寫
2财搁、解耦css/javascript
js改變class而不改變style
3蘸炸、解耦應(yīng)用邏輯/事件處理程序

以下是一些混合在一起的方法

function handleKeyPress(event) {
    event = EventUtil.getEvent(event);
    if(event.keyCode ==13){
        var target = EventUtil.getTarget(event);
        var value = 5*parseFloat(target.value);
        if(value>10){
            document.getElementById("error-msg").style.display = "block";
        }
    }
}

然后把業(yè)務(wù)和事件拆分開看看


function handleKeyPress(event) {
    event = EventUtil.getEvent(event);
    if(event.keyCode ==13){
        var target = EventUtil.getTarget(event);
        validateValue(target.value)
    }
}
function validateValue(value) {
    value = 5*value;
    if(value>10){
        document.getElementById("error-msg").style.display = "block";
    }
}

以下是松散耦合的原則:

  • event對(duì)象不當(dāng)成參數(shù)傳
  • 任何可以在因用戶層面的動(dòng)作都應(yīng)該可以在不執(zhí)行任何時(shí)間處理程序的情況下進(jìn)行
  • 任何事件處理程序都應(yīng)該處理事件,然后將處理轉(zhuǎn)交給應(yīng)用邏輯

1.3 實(shí)戰(zhàn):

1尖奔、尊重對(duì)象所擁有權(quán)
2搭儒、避免全局量
3、避免與null進(jìn)行比較提茁,如果遇到一個(gè)與null比較的代碼淹禾,嘗試一下的技術(shù):
如果值應(yīng)該為一個(gè)引用類型,用instanceof
如果值應(yīng)該是一個(gè)基本類型茴扁,用typeof檢測(cè)其類型
如果是希望對(duì)象包含摸個(gè)特定的方法名铃岔,typeo操作符確保指定名字存在于對(duì)象上

4、使用常量
將數(shù)據(jù)和使用它的邏輯進(jìn)行分離峭火,
1德撬、重復(fù)值 任何再多出用到的值铲咨,都應(yīng)該抽取為一個(gè)常量。
2蜓洪、用戶界面字符串--任何用于顯示給用戶的字符串纤勒,都硬掰抽取出來以方便國際化
3、URLs-- 資源位置容易變隆檀,所以需要公共地方存放
4摇天、任意可能會(huì)改變的值

2、性能

2.1 注意作用域

只要能減少作用域鏈上消耗的時(shí)間恐仑,就能增加腳本的整體性能
1泉坐、避免全局查找:比如頻繁的調(diào)用document
2、避免with語句裳仆,with會(huì)創(chuàng)建自己的作用域腕让。從而增加了其中執(zhí)行的代碼的作用域鏈的長度。

2.2 選擇正確的方法:

1歧斟、 避免不必要的屬性查找

注意:
數(shù)組的復(fù)雜度是O(1)而對(duì)象的空間復(fù)雜度是O(n);
所以一旦多次遇到對(duì)象的屬性,應(yīng)該將他們存放在局部變量中静袖。
盡可能多的使用局部變量將睡醒查找替換為值查找

2觉鼻、優(yōu)化迭代

  1. for循環(huán)從大到小
  2. 簡(jiǎn)化終止條件
  3. 簡(jiǎn)化循環(huán)體
  4. 使用后測(cè)試循環(huán),for while是前測(cè)試循環(huán)do-while是后測(cè)試循環(huán)队橙,避免了終止的計(jì)算

3坠陈、展開循環(huán)
循環(huán)次數(shù)確定時(shí)候,消除循環(huán)捐康,多次函數(shù)調(diào)用仇矾,往往更快,
4解总、避免出現(xiàn)雙重解釋
eval("alert('')");
new Function();
setTimeOut("",300);
5若未、性能的其他注意項(xiàng):
原生的方法比較快:Math.各種方法比手寫的算法快,因?yàn)閖s默認(rèn)的方法是c/c++直接編譯的
switch語句比ifelse快
位運(yùn)算比任何布爾運(yùn)算或者算術(shù)運(yùn)算快

2.3最小化語句數(shù):

1倾鲫、多個(gè)變量申明粗合,
var a=1,b=2,c=3這種
2、插入迭代值

一個(gè)語句完成兩個(gè)語句的事情時(shí)候乌昔,用i++嵌套到語句中
3隙疚、使用數(shù)組和對(duì)象字面量

2.4優(yōu)化DOM交互

最小化現(xiàn)場(chǎng)更新,使用innerHTML磕道,使用時(shí)間代理供屉,注意HTMLCollection的使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子伶丐,更是在濱河造成了極大的恐慌悼做,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哗魂,死亡現(xiàn)場(chǎng)離奇詭異肛走,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)录别,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門朽色,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人组题,你說我怎么就攤上這事葫男。” “怎么了崔列?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵梢褐,是天一觀的道長。 經(jīng)常有香客問我赵讯,道長盈咳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任瘦癌,我火速辦了婚禮猪贪,結(jié)果婚禮上跷敬,老公的妹妹穿的比我還像新娘讯私。我一直安慰自己,他們只是感情好西傀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布斤寇。 她就那樣靜靜地躺著,像睡著了一般拥褂。 火紅的嫁衣襯著肌膚如雪娘锁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天饺鹃,我揣著相機(jī)與錄音莫秆,去河邊找鬼。 笑死悔详,一個(gè)胖子當(dāng)著我的面吹牛镊屎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茄螃,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缝驳,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起用狱,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤运怖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后夏伊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摇展,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年署海,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吗购。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砸狞,死狀恐怖捻勉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刀森,我是刑警寧澤踱启,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站研底,受9級(jí)特大地震影響埠偿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜榜晦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一冠蒋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乾胶,春花似錦抖剿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喻频,卻和暖如春缩宜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甥温。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工锻煌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姻蚓。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓宋梧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親史简。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乃秀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法肛著,類相關(guān)的語法,內(nèi)部類的語法跺讯,繼承相關(guān)的語法枢贿,異常的語法,線程的語...
    子非魚_t_閱讀 31,632評(píng)論 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,806評(píng)論 1 10
  • 我不知道自己到底喜不喜歡貓刀脏。 看到了總想親近局荚,聽到軟媚的叫聲骨頭也實(shí)在是酥得厲害。但真要我抱起來愈污,養(yǎng)在家里耀态,又多少...
    水色小雛菊閱讀 197評(píng)論 0 0
  • 這幾天首装,關(guān)于里約奧運(yùn)會(huì)的話題,開始成為大家茶余飯后的談資杭跪。對(duì)于巴西“史上最不給力奧運(yùn)會(huì)”的吐槽仙逻,或關(guān)于某國代表團(tuán)因...
    蜘蜘紡閱讀 130評(píng)論 0 0
  • 南方的高山追趕藍(lán)天, 想用深邃的雙眼 兌換永世的青春涧尿。 只因知道陽光偏愛人間系奉, 溫暖是天長地久的。 匆匆而逝的云呢...
    葉落晨曦閱讀 200評(píng)論 0 3