首頁 >web前端 >js教程 >寫出高效jquery代碼的19條指南_jquery

寫出高效jquery代碼的19條指南_jquery

WBOY
WBOY原創
2016-05-16 16:55:071110瀏覽

首先,在腦中牢牢記住jQuery就是javascript。這意味著我們應該採取相同的編碼慣例,風格指南和最佳實踐。
首先,如果你是一個javascript新手,我建議您閱讀 《給JavaScript初學者的24條最佳實踐》 ,這是一篇高質量的javascript教程,接觸jQuery之前最好先閱讀。
當你準備使用jQuery,我強烈建議你遵循下面這些指南:
1.快取變數
DOM遍歷是昂貴的,所以盡量將會重用的元素快取。

複製程式碼 程式碼如下:

// 糟糕

h = $('#element').height();
$('#element').css('height',h-20);

// 建議

$element = $('#element');
h = $element.height();
$element.css('height',h-20);


2 .避免全域變數
jQuery與javascript一樣,一般來說,最好確保你的變數在函數作用域內。
複製程式碼 程式碼如下:

// 糟糕

$element = $('#element');
h = $element.height();
$element.css('height',h-20);

// 建議

var $element = $('#element');
var h = $element.height();
$element.css('height',h-20);


3.使用匈牙利命名法
在變數前面加上$前綴,方便辨識出jQuery物件。
複製程式碼 程式碼如下:

// 糟糕

var first = $('#first');
var second = $('#second');
var value = $first.val();

// 建議 - 在jQuery物件前加$前綴

var $first = $('#first');
var $second = $('#second'),
var value = $first.val();


4 .使用Var 鏈(單Var 模式)
將多條var語句合併為一條語句,我建議將未賦值的變數放到後面。
複製程式碼 程式碼如下:

var
  $first = $first '),
  $second = $('#second'),
  value = $first.val(),
  k = 3,
  cookiestring = 'SOMECOOKIESPLEASE',
  i,,
  i,
  j,
  myArray = {};

5.請使用'On'
在新版jQuery中,更短的on(“click”) 用來取代類似click()這樣的函數。在之前的版本中 on() 就是 bind()。自從jQuery 1.7版本後,on() 附加事件處理程序的首選方法。然而,出於一致性考慮,你可以簡單的全部使用 on()方法。 程式碼如下:

// 糟糕


$first.click(function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');

});


$first.hover(function(){
    $first.css('border','1px solid red');

})


// 建議
$first.on('click',function(){
    $first.css('border','1px solid red');
   $first.s(' color','blue');

})


$first.on('hover',function(){
    $first.css('border','1px solid red');

})

6.精簡javascript
一般來說,最好盡可能合併函數。 程式碼如下:

// 糟糕


$first.click(function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');

});

// 建議


$first.on('click',function(){
    $first.css({
        'border':'1px solid red',    });
});

7.鍊式運算
jQuery實作方法的鍊式運算是非常容易的。下面利用這一點。

複製程式碼 程式碼如下:

// 糟糕

$second.html(value);
$second.on('click',function(){
    alert('hello everybody');
});
$second. fadeIn('slow');
$second.animate({height:'120px'},500);

// 建議

$second.html(value);
$second.on('click',function(){
    alert('hello everybody');
}).fadeIn('slow') .animate({height:'120px'},500);


8.維持程式碼的可讀性
伴隨著精簡程式碼和使用鍊式的同時,可能帶來程式碼的難以閱讀。加入縮緊和換行能起到很好的效果。
複製程式碼 程式碼如下:

// 糟糕

$second.html(value);
$second.on('click',function(){
    alert('hello everybody');
}).fadeIn('slow') .animate({height:'120px'},500);

// 建議

$second.html(value);
$second
    .on('click',function(){ alert('hello everybody');})
    .fadeIn('slowfadeIn('slow')
    .animate({height:'120px'},500);


9.選擇短路求值
短路求值是一個從左到右求值的表達式,用&&(邏輯與)或|| (邏輯或)操作符。
複製程式碼 程式碼如下:

// 糟糕

function initVar($myVar) {
    if(!$myVar) {
        $myVar = $('#selector');// 建議

function initVar($myVar) {

    $myVar = $myVar || $('#selector');

}


10.選擇捷徑
精簡程式碼種方式是利用編碼捷徑。




複製程式碼 程式碼如下:// 糟糕
if(collection.length > 0){..}
// 建議

if(collection.length){..}

11.繁重的操作中分離元素

如果你打算對DOM元素做大量操作(連續設定多個屬性或css樣式),建議先分離元素然後在添加。




複製程式碼 程式碼如下:// 糟糕
var
    $container = $("#container"),    $containerLi = $("#container li"),

    $element = null;

$element = $containerLi.first();
//... 許多複雜的操作

// better

var

    $container = $("#container"),

    $containerLi = $container.find("li"),

    $element = null;
    $element = null;

$element = $containerLi.first().detach();

//... 許多複雜的操作


$container.append($element);

12.熟記技巧

你可能對使用jQuery中的方法缺少經驗,一定要查看的文檔,可能會有一個更好或更快的方法來使用它。


複製程式碼 程式碼如下:
// 糟糕

$('#id').data(key,value);

// 建議 (高效率)

$.data('#id',key,value);

13.使用子查詢快取的父元素

如前面所提到的,DOM遍歷是一項昂貴的操作。典型做法是快取父元素並在選擇子元素時重複使用這些快取元素。


複製程式碼 程式碼如下:
// 糟糕

var     $container = $('#container'),

    $containerLi = $('#container li'),
    $containerLiSpan = $("#conStainer

// 建議 (高效率)

var

    $container = $('#container '),

    $containerLi = $container.find('li'),
    $containerLiS.

14.避免通用選擇符

將通用選擇符放到後代選擇符中,表現非常糟糕。


複製程式碼 程式碼如下:

// 糟糕

$('.container > *');

// 建議

$('.container').children();
避免隱式通用選擇符
通用選擇符有時是隱式的,不容易發現。

// 糟糕

$('.someclass :radio');

// 建議

$('.someclass input:radio');
最佳化選擇符
例如,Id選擇符應該是唯一的,所以沒有必要添加額外的選擇符。

// 糟糕

$('div#myid');
$('div#footer a.myLink');

// 建議
$('#myid');
$('#footer .myLink');


15.避免多重ID選擇符
在此強調,ID 選擇符應該是唯一的,不需要增加額外的選擇符,更不需要多個後代ID選擇符。
複製程式碼 程式碼如下:

// 糟糕

$('#outer #inner');

// 建議

$('#inner');


16.堅持最新版本
新版本通常更好:更輕量級,更有效率。顯然,你需要考慮你要支援的程式碼的兼容性。例如,2.0版本不支援ie 6/7/8。

摒棄棄用方法
專注於每個新版本的廢棄方法是非常重要的並儘量避免使用這些方法。

複製程式碼 程式碼如下:

// 很糟糕 - live 已經廢棄


// 很糟糕 - live 已經廢棄

$('#stuff').live('click', function() {

  console.log('hooray');
});

// 建議

$('#stuff').on('click', function() {
  console.log('hooray');
});
// 註:此處可能不當,應為live能實現即時綁定,delegate或許更合適

17.利用CDN
Google的CND能保證選擇離用戶最近的快取並迅速回應。 (使用GoogleCND請自行搜尋地址,此處地址不能使用,推薦jquery官網提供的CDN)。

18.必要時組合jQuery和javascript原生程式碼

如上所述,jQuery就是javascript,這表示用jQuery能做的事情,同樣可以用原生程式碼來做。原生程式碼(或 vanilla)的可讀性和可維護性可能不如jQuery,而且程式碼更長。但也意味著更有效率(通常更接近底層程式碼可讀性越差,效能越高,例如:彙編,當然需要更強大的人才可以)。牢記沒有任何框架能比原生程式碼更小,更輕,更有效率


鑑於vanilla 和 jQuery之間的效能差異,我強烈建議吸收兩人的精華,使用(可能的話)和jQuery等價的原生程式碼。

19.最後忠告最後,我記錄這篇文章的目的是提高jQuery的性能和其他一些好的建議。如果你想深入的研究對這個主題你會發現很多樂趣。記住,jQuery並非不可或缺,僅是一種選擇。思考為什麼要使用它。 DOM操作? ajax?模版? css動畫?還是選擇符引擎?或許javascript微型框架或jQuery的定製版是更好的選擇。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn