久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

編寫更好的jQuery代碼

 悟靜 2014-04-25

現(xiàn)在已經(jīng)有很多文章討論jQuery和JavaScript的性能問題,,然而,,在這篇文章中我計劃總結(jié)一些提升速度的技巧和一些我自己的建議來改善你的jQuery和JavaScript代碼。更好的代碼意味著更快的應(yīng)用程序,,快速渲染和反應(yīng)性意味著一個更好的用戶體驗,。

首先,我們要記住最重要的一點是:jQuery也是javascript,,也就是意味著我們要對jQuery和javascript使用相同的編碼規(guī)則和風(fēng)格指南,,還有最佳實踐。

另外,,如果你是一個javascript的初學(xué)者,那么我建議你在開始jQuery之前看一下JavaScript best practices for beginners 和 writing high quality JavaScript這兩篇文章。

如果你已經(jīng)開始使用jQuery了,,那么我強(qiáng)烈建議遵守下面的建議:

緩存變量

DOM的遍歷是非常昂貴的,,所以盡量緩存一些可能會被重新用到的變量。

1
2
3
4
5
6
7
8
9
10
// bad
 
h = $('#element').height();
$('#element').css('height',h-20);
 
// good
 
$element = $('#element');
h = $element.height();
$element.css('height',h-20);

避免全局變量

使用jQuery和使用javascript一樣,,最好確保你的變量在你的函數(shù)作用域內(nèi),。

1
2
3
4
5
6
7
8
9
10
11
// bad
 
$element = $('#element');
h = $element.height();
$element.css('height',h-20);
 
// good
 
var $element = $('#element');
var h = $element.height();
$element.css('height',h-20);

使用匈牙利命名法

在變量前加上一個$符號,很容易看出來這是一個jQuery變量,。

1
2
3
4
5
6
7
8
9
10
11
// bad
 
var first = $('#first');
var second = $('#second');
var value = first.val();
 
// better - we use to put $ symbol before jQuery-manipulated objects
 
var $first = $('#first');
var $second = $('#second'),
var value = $first.val();

使用 Var 鏈(單 Var 模式)

 不要使用多個var聲明,,可以將它們合并為一個var聲明,建議將沒有指定值的變量放在最后,。

1
2
3
4
5
6
7
8
9
var
  $first = $('#first'),
  $second = $('#second'),
  value = $first.val(),
  k = 3,
  cookiestring = 'SOMECOOKIESPLEASE',
  i,
  j,
  myArray = {};

最好使用on 綁定事件

最新版本的jQuery已經(jīng)將click()改變?yōu)楹瘮?shù)on('click')的簡寫,。在之前的版本中實現(xiàn)的不同,click()簡寫bind()。在jQuery 1.7中,on()是首選方法用于附加事件處理程序,。然而,對于一致性可以簡單地使用on(),。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// bad
 
$first.click(function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');
});
 
$first.hover(function(){
    $first.css('border','1px solid red');
})
 
// better
$first.on('click',function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');
})
 
$first.on('hover',function(){
    $first.css('border','1px solid red');
})

壓縮精簡javascript

一般來說,,我們要盡可能的合并函數(shù)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// bad
 
$first.click(function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');
});
 
// better
 
$first.on('click',function(){
    $first.css({
        'border':'1px solid red',
        'color':'blue'
    });
});

使用鏈?zhǔn)讲僮?/STRONG>

根據(jù)上面的規(guī)則,,jQuery很容易將方法鏈接在一起,我們要利用這一優(yōu)點,。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// bad
 
$second.html(value);
$second.on('click',function(){
    alert('hello everybody');
});
$second.fadeIn('slow');
$second.animate({height:'120px'},500);
 
// better
 
$second.html(value);
$second.on('click',function(){
    alert('hello everybody');
}).fadeIn('slow').animate({height:'120px'},500);

保持代碼的可讀性

當(dāng)精簡了javascript代碼和使用了鏈?zhǔn)讲僮鳎愕拇a有時候會變得不可讀,,盡量使用縮進(jìn)和換行使代碼變得漂亮些,。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// bad
 
$second.html(value);
$second.on('click',function(){
    alert('hello everybody');
}).fadeIn('slow').animate({height:'120px'},500);
 
// better
 
$second.html(value);
$second
    .on('click',function(){ alert('hello everybody');})
    .fadeIn('slow')
    .animate({height:'120px'},500);

使用短路求值

短路求值是一個從左到右求值的表達(dá)式,用 &&(邏輯與)或 || (邏輯或)操作符,。

1
2
3
4
5
6
7
8
9
10
11
12
13
// bad
 
function initVar($myVar) {
    if(!$myVar) {
        $myVar = $('#selector');
    }
}
 
// better
 
function initVar($myVar) {
    $myVar = $myVar || $('#selector');
}

使用快捷的方式

精簡代碼的方式之一就是利用一些編碼捷徑,。

1
2
3
4
5
6
7
// bad
 
if(collection.length > 0){..}
 
// better
 
if(collection.length){..}

復(fù)雜的操作要分離元素

如果對DOM元素做大量操作(連續(xù)設(shè)置多個屬性或css樣式),建議首先分離元素然后在添加,。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// bad
 
var
    $container = $("#container"),
    $containerLi = $("#container li"),
    $element = null;
 
$element = $containerLi.first();
//... a lot of complicated things
 
// better
 
var
    $container = $("#container"),
    $containerLi = $container.find("li"),
    $element = null;
 
$element = $containerLi.first().detach();
//...a lot of complicated things
 
$container.append($element);

了解技巧

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

1
2
3
4
5
6
7
// bad
 
$('#id').data(key,value);
 
// better (faster)
 
$.data('#id',key,value);

使用子查詢緩存的父元素

像之前提到的一樣,DOM的遍歷的代價很大,,典型做法是緩存父元素并在選擇子元素時重用這些緩存元素,。

1
2
3
4
5
6
7
8
9
10
11
12
13
// bad
 
var
    $container = $('#container'),
    $containerLi = $('#container li'),
    $containerLiSpan = $('#container li span');
 
// better (faster)
 
var
    $container = $('#container '),
    $containerLi = $container.find('li'),
    $containerLiSpan= $containerLi.find('span');

避免通用選擇符

當(dāng)和其他的選擇符一起使用時,,通用選擇符非常的慢,。

1
2
3
4
5
6
7
// bad
 
$('.container > *');
 
// better
 
$('.container').children();

避免使用隱式通用選擇符

當(dāng)你漏下了選擇符,通用選擇符(*)仍然起作用

1
2
3
4
5
6
7
// bad
 
$('.someclass :radio');
 
// better
 
$('.someclass input:radio');

優(yōu)化選擇符

例如,,Id選擇符應(yīng)該是唯一的,所以沒有必要添加額外的選擇符,。

1
2
3
4
5
6
7
8
// bad
 
$('div#myid');
$('div#footer a.myLink');
 
// better
$('#myid');
$('#footer .myLink');

避免多個ID選擇符

再次強(qiáng)調(diào)ID 選擇符應(yīng)該是唯一的,不需要添加額外的選擇符,,更不需要多個后代ID選擇符,。

1
2
3
4
5
6
7
// bad
 
$('#outer #inner');
 
// better
 
$('#inner');

盡量使用最新版本

新版本通常更好:更輕量級,,更高效。顯然,,你需要考慮你要支持的代碼的兼容性,。例如,2.0版本不支持ie 6/7/8,。

不要使用被棄用的方法

關(guān)注每個新版本的廢棄方法是非常重要的并盡量避免使用這些方法,。

 

1
2
3
4
5
6
7
8
9
10
/ bad - live is deprecated
 
$('#stuff').live('click', function() {
  console.log('hooray');
});
 
// better
$('#stuff').on('click', function() {
  console.log('hooray');
}); 

利用CDN加載加載jQuery

谷歌的CND能保證選擇離用戶最近的緩存并迅速響應(yīng),地址是http://code.jQuery.com/jQuery-latest.min.js

必要時組合jQuery和javascript原生代碼

上所述,jQuery就是javascript,,這意味著用jQuery能做的事情,,同樣可以用原生代碼來做。原生代碼的可讀性和可維護(hù)性可能不如jQuery,,而且代碼更長,。但也意味著更高效(通常更接近底層代碼可讀性越差,性能越高,,例如:匯編,,當(dāng)然需要更強(qiáng)大的人才可以)。記住沒有任何框架能比原生代碼更小,,更輕,,更高效。

最后忠告

最后,,寫這篇文章的目的是提高jQuery的性能和給出一些好的建議,。如果你想深入的研究對這個話題你會發(fā)現(xiàn)很多樂趣。記住,,jQuery并非不可或缺,,僅是一種選擇。思考為什么要使用它,。DOM操作,?ajax,?模版?css動畫,?還是選擇符引擎,?有時候,javascript微型框架或jQuery的需求定制版同樣是值得考慮的,。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多