多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > jquery > jQuery 性能規則分析

jQuery 性能規則分析

來源:程序員人生   發布時間:2013-10-19 02:34:44 閱讀次數:3008次

英原文:jquery-performance-rules
翻譯:Skyline.xin

之前,我們需要擔心減少字節數和請求次數以及加載順序以使頁面加載的更快。如今,我們越來越多的注意到一個影響性能的重要組成部分--CPU利用率。使用 jQuery和其他JavaScript框架,使節點選擇和DOM操作變得越來越容易,但如果你不小心使用了一些減少瀏覽器本身要做的工作的一些做法可能 會帶來不好的結果。

1.總是使用#id去尋找element.
在jQuery中最快的選擇器是ID選擇器 ($('#someid')). 這是因為它直接映射為JavaScript的getElementById()方法。

選擇單個元素
代碼
<div id="content">
<form method="post" action="/">
<h2>Traffic Light</h2>
<ul id="traffic_light">
<li><input type="radio" class="on" name="light" value="red" /> Red</li>
<li><input type="radio" class="off" name="light" value="yellow" /> Yellow</li>
<li><input type="radio" class="off" name="light" value="green" /> Green</li>
</ul>
<input class="button" id="traffic_button" type="submit" value="Go" />
</form>
</div>
選擇button的性能不好的一種方式:

var traffic_button = $('#content .button');
取而代之的是直接選擇button:

var traffic_button = $('#traffic_button');
選擇多個元素

在我們討論選擇多個元素的時候,我們真正需要知道的是DOM的遍歷和循環才是性能低下的原因。為了盡量減少性能損失, 總是使用最近的父ID去尋找。

var traffic_lights = $('#traffic_light input');

2.在Classes前面使用Tags
在jQuery中第二快的選擇器就是Tag選擇器 ($('head')). 而這是因為它直接映射到JavaScript的getElementsByTagName()方法。

代碼
<div id="content">
<form method="post" action="/">
<h2>Traffic Light</h2>
<ul id="traffic_light">
<li><input type="radio" class="on" name="light" value="red" /> Red</li>
<li><input type="radio" class="off" name="light" value="yellow" /> Yellow</li>
<li><input type="radio" class="off" name="light" value="green" /> Green</li>
</ul>
<input class="button" id="traffic_button" type="submit" value="Go" />
</form>
</div>
總是在一個Class前面加上一個tag名字(記得從一個ID傳下來)

var active_light = $('#traffic_light input.on');
注意:在jQuery里Class選擇器是最慢的一個選擇器;在IE中它循環整個DOM。可能的話盡量避免使用它。不要在ID前面加Tags。例如,它會因為去循環所有的<div>元素去尋找ID為content的<div>,而導致很慢。

var content = $('div#content');
按照同樣的思路,從多個ID傳下來是冗余的。

var traffic_light = $('#content #traffic_light');
3.緩存jQuery對象

養成保存jQuery對象到一個變量上(就像上面的例子)的習慣。例如,不要這樣做:

代碼
$('#traffic_light input.on).bind('click', function(){...});
$('#traffic_light input.on).css('border', '3px dashed yellow');
$('#traffic_light input.on).css('background-color', 'orange');
$('#traffic_light input.on).fadeIn('slow');
取而代之,首現保存jQuery變量到一個本地變量后,再繼續你的操作。

代碼
var $active_light = $('#traffic_light input.on');
$active_light.bind('click', function(){...});
$active_light.css('border', '3px dashed yellow');
$active_light.css('background-color', 'orange');
$active_light.fadeIn('slow');
提示:使用$前輟表示我們的本地變量是一個jQuery包集。記住,不要在你的應該程序里出現一次以上的jQuery重復的選擇操作。

額外提示:延遲存儲jQuery對象結果。
如果你想在你的程序的其它地方使用jQuery結果對象(result object(s)),或者你的函數要執行多次,要把它緩存在一個全局范圍的對象里。通過定義一個全局容器保存jQuery結果對象,就可以在其它的函數里引用它。

代碼
// Define an object in the global scope (i.e. the window object)
window.$my =
{
// Initialize all the queries you want to use more than once
head : $('head'),
traffic_light : $('#traffic_light'),
traffic_button : $('#traffic_button')
};

function do_something()
{
// Now you can reference the stored results and manipulate them
var script = document.createElement('script');
$my.head.append(script);

// When working inside functions, continue to save jQuery results
// to your global container.
$my.cool_results = $('#some_ul li');
$my.other_results = $('#some_table td');

// Use the global functions as you would a normal jQuery result
$my.other_results.css('border-color', 'red');
$my.traffic_light.css('border-color', 'green');
}
4.更好的利用鏈

前面的例子也可以這樣寫:

var $active_light = $('#traffic_light input.on');$active_light.bind('click', function(){...})
.css('border', '3px dashed yellow')
.css('background-color', 'orange')
.fadeIn('slow');
這樣可以讓我們寫更少的代碼,使JavaScript更輕量。

5.使用子查詢
jQuery允許我們在一個包集上附加其它的選擇器。因為我們已經在本地變量里保存了父對象這樣會減少以后在選擇器上的性能開銷。

代碼
<div id="content">
<form method="post" action="/">
<h2>Traffic Light</h2>
<ul id="traffic_light">
<li><input type="radio" class="on" name="light" value="red" /> Red</li>
<li><input type="radio" class="off" name="light" value="yellow" /> Yellow</li>
<li><input type="radio" class="off" name="light" value="green" /> Green</li>
</ul>
<input class="button" id="traffic_button" type="submit" value="Go" />
</form>
</div>
例如,我們可以利用子查詢緩存active和inactive lights以便后面的操作。

var $traffic_light = $('#traffic_light'),
$active_light = $traffic_light.find('input.on'),
$inactive_lights = $traffic_light.find('input.off');
提示:可以用逗號隔開一次定義多個本地變量,這樣可以節省一些字節。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: free性欧美xxx | 欧美一区二区三区四区在线观看 | 欧美性暴力变态xxxx | 色欧美在线视频 | 久久国产精品一国产精品 | 日韩一级欧美一级一级国产 | 欧美一区二区三区高清视频 | 国产好大好爽久久久久久久 | 欧美特级黄色 | 91亚洲精品福利在线播放 | 国产二区精品 | 国产香蕉一区二区在线观看 | 黄xxxx | 中国黄色网址大全 | 亚洲天堂麻豆 | 欧美日一区二区三区 | 亚洲最大在线视频 | 亚洲欧美久久婷婷爱综合一区天堂 | 日韩色综合 | 亚洲网站在线 | 日韩欧美印度一级毛片 | 亚洲日本中文字幕永久 | 尤物精品 | 男人午夜网站 | 毛片在线播放观看日本 | 欧洲区二区三区四区 | 国产精品9999久久久久 | 亚欧国产 | 俺去在线| 亚洲欧洲在线观看 | 欧美aa在线| 国产性色视频 | 成人18xxxx网站| 亚洲色图欧美色 | 欧美手机手机在线视频一区 | 手机看片日韩日韩国产在线看 | 羞羞动漫在线免费观看 | 五月天婷五月天综合网在线 | 国产一区二区在线视频播放 | 伊人网站 | 伊人久久成人 |