編寫高效jQuery代碼的4個(gè)原則和5個(gè)技巧
jQuery的編寫原則:
一、不要過(guò)度使用jQuery
1. jQuery速度再快,也無(wú)法與原生的javascript方法相比,而且建立的jQuery對(duì)象包含的信息量很龐大。所以有原生方法可以使用的場(chǎng)合,盡量避免使用jQuery。
$("a").click(function(){
alert($(this).attr("id"));
});
//改良后↓
$("a").click(function(){
alert(this.id);
});
2. 許多jQuery方法都有兩個(gè)版本,一個(gè)是供jQuery對(duì)象使用的版本,另一個(gè)是供jQuery函數(shù)使用的版本。由于后者不通過(guò)jQuery對(duì)象操作,所以相對(duì)開銷較小,速度比較快。
var $text = $("#text");
var $ts = $text.text();
//改良后↓
var $text = $("#text");
var $ts = $.text($text);
這里是用了“$.text()”的內(nèi)置函數(shù),其他類似的還有“$.data()”等。
二、緩存jQuery對(duì)象
查找DOM元素實(shí)際上有不小的內(nèi)存開銷,使用選擇器的次數(shù)應(yīng)該越少越好,并且盡可能緩存選中的結(jié)果,便于以后反復(fù)使用。記住,永遠(yuǎn)不要讓相同的選擇器出現(xiàn)多次。
例如:
$("#top").find("p.classA");
$("#top").find("p.classB");
改良后↓
var cached = $("#top");
cached.find("p.classA");
cached.find("p.classB");
三、少改動(dòng)DOM結(jié)構(gòu)
如果要多次改動(dòng)DOM結(jié)構(gòu),就先把要改動(dòng)的部分先取出來(lái),改動(dòng)完成后再放回去。這里的基本思想是在內(nèi)存中建立你確實(shí)想要的東西,最后做一次最有效的更新DOM操作。
例如:
var top_100_list = [...], // 這里是100個(gè)字符串的數(shù)組
$mylist = $("#mylist");
for (var i=0, l=top_100_list.length; i<l; i++){
$mylist.append("<li>" + top_100_list[i] + "</li>"); // 100次DOM操作
}
改良后↓
var top_100_list = [...],
$mylist = $("#mylist"),
top_100_li = ""; // 這個(gè)變量用來(lái)存儲(chǔ)變化的字符串
for (var i=0, l=top_100_list.length; i<l; i++){
top_100_li += "<li>" + top_100_list[i] + "</li>";
}
$mylist.html(top_100_li);// DOM操作只有這么一次
四、命名規(guī)范
jQuery代碼中不免夾雜有JS代碼,如何讓jQuery代碼看起來(lái)嚴(yán)謹(jǐn)有序,規(guī)范自己的命名規(guī)則能更好的提高代碼的閱讀性。
1. 函數(shù)名:function getResultByUserId(){..},遵循駱駝命名法,首字母小寫,單詞首字母大寫,盡量短而且明確表達(dá)方法的用意。
還可以這樣定義:
$.flushCartItemList = function() {
isAjaxDate = true;
}
2. 參數(shù)名:function method(recordIdx, recordVal){..}, 同函數(shù)名,參數(shù)盡量用縮寫。
命名就是要有意義,一些屬性的縮寫也很有講究,例如:索引:idx;值:val;長(zhǎng)度:len;名稱:nm;等...
3. 變量名:var user_id; var user_list_tab; var user_list_tr_1;,一般以下劃線為單詞分割,按照“命名_元素_索引”的規(guī)則。
jQuery對(duì)象的變量名要加上“$”的前綴以區(qū)分javascript對(duì)象。
jQuery編寫技巧:
一、選擇器擇優(yōu)
選擇器是jQuery的基礎(chǔ),如何選擇效率最高的選擇器,先要了解各種選擇器的性能差異。
①ID選擇器和標(biāo)簽元素選擇器:$("#ID"); $("Tag");
jQuery內(nèi)部會(huì)自動(dòng)調(diào)用瀏覽器的原生方法(getElementById();,getElementByTagName();),所以執(zhí)行速度快。
②類選擇器:$(".Class");
jQuery會(huì)遍歷所有DOM節(jié)點(diǎn)查找class=Class的DOM對(duì)象,所以執(zhí)行速度較慢。
③偽類選擇器和屬性選擇器:$(":Type"); $("[Attribute='Value']");
因?yàn)闉g覽器沒有針對(duì)它們的原生方法,這兩種選擇器執(zhí)行速度是最慢的。不過(guò),不排除一些第三方瀏覽器增加了querySelector()和querySelectorAll()方法,因此會(huì)使這類選擇器的性能有大幅提高。
二、鏈?zhǔn)綄懛?/STRONG>
采用鏈?zhǔn)綄懛〞r(shí),jQuery會(huì)自動(dòng)緩存每一步的結(jié)果,比非鏈?zhǔn)綄懛ǎㄊ謩?dòng)緩存)要快。
三、高效循環(huán)
循環(huán)總是一種比較耗時(shí)的操作,javascript原生循環(huán)方法for和while,要比jQuery的“.each()”快。并且關(guān)于for循環(huán),以下這種寫法效率最高。
for (var i = 0, len = array.length; i < len; i++) {
// alert(i);
}
先聲明變量,再進(jìn)行循環(huán)操作,效率遠(yuǎn)比遍歷數(shù)組“for (var i in arr)”高得多,也比循環(huán)取得數(shù)組長(zhǎng)度“for (var i = 0; i < arr.length; i++)”的效率高!
四、字符串拼接
字符串的拼接在開發(fā)中會(huì)經(jīng)常遇到,用“+=”的方式來(lái)拼接字符串的效率非常的低,我們可以利用數(shù)組的“.join()”方法。
var array = [];
for(var i = 0; i < 10000; i++){
array[i] = "<input type='button' value='a'>";
}
document.getElementById("one").innerHTML = array.join("");
以前我很喜歡用數(shù)組的原生的方法“.push()”,其實(shí)直接用arr[i]或者arr[arr.length]的方式要快一點(diǎn),但是差別不是很大。
五、頁(yè)面加載
盡管$(function(){}); 確實(shí)很有用, 它是在所有DOM元素加載完成。如果你發(fā)現(xiàn)你的頁(yè)面一直是載入中的狀態(tài),很有可能就是這個(gè)函數(shù)引起的。你可以通過(guò)將jQuery函數(shù)綁定到$(window).load 事件的方法來(lái)減少頁(yè)面載入時(shí)的cpu使用率。
$(window).load(function(){
// 頁(yè)面完全載入(包括所有的DOM元素和JS代碼)后才初始化的jQuery函數(shù).
});
一些特效的功能,例如拖放,視覺特效和動(dòng)畫,預(yù)載入隱藏圖像等等,都是適合這種技術(shù)的場(chǎng)合。
- 了解jQuery技巧來(lái)提高你的代碼(個(gè)人覺得那個(gè)jquery的手冊(cè)很不錯(cuò))
- 關(guān)于jQuery UI 使用心得及技巧
- 關(guān)于jQuery新的事件綁定機(jī)制on()的使用技巧
- jquery的選擇器的使用技巧之如何選擇input框
- jquery操作復(fù)選框(checkbox)的12個(gè)小技巧總結(jié)
- jQuery提交多個(gè)表單的小技巧
- jquery中EasyUI使用技巧小結(jié)
- jquery性能優(yōu)化高級(jí)技巧
- 分享15個(gè)大家都熟知的jquery小技巧
- jQuery前端開發(fā)35個(gè)小技巧
相關(guān)文章
jquery $(document).ready() 與window.onload的區(qū)別
Jquery中$(document).ready()的作用類似于傳統(tǒng)JavaScript中的window.onload方法,不過(guò)與window.onload方法還是有區(qū)別的。2009-12-12
JQuery中使用ajax傳輸超大數(shù)據(jù)的解決方法
這篇文章主要介紹了JQuery中使用ajax傳輸超大數(shù)據(jù)的解決方法,也就是比較多的數(shù)據(jù),超過(guò)max_upload_size等設(shè)置,本文方法在chrome瀏覽器下測(cè)試通過(guò),需要的朋友可以參考下2014-07-07
JQuery validate插件驗(yàn)證用戶注冊(cè)信息
這篇文章主要為大家詳細(xì)介紹了JQuery validate插件驗(yàn)證用戶注冊(cè)信息的具體代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
jquery.form.js框架實(shí)現(xiàn)文件上傳功能案例解析(springmvc)
這篇文章主要為大家詳細(xì)介紹了jquery.form.js/springmvc文件上傳功能的實(shí)現(xiàn)步驟,使用的技術(shù)有jquery.form.js框架,以及springmvc框架,具有實(shí)用價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
jQuery+vue.js實(shí)現(xiàn)的多選下拉列表功能示例
這篇文章主要介紹了jQuery+vue.js實(shí)現(xiàn)的多選下拉列表功能,涉及jQuery+vue.js數(shù)據(jù)綁定及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
jQuery+ajax實(shí)現(xiàn)局部刷新的兩種方法
在項(xiàng)目中,經(jīng)常會(huì)用到ajax,比如實(shí)現(xiàn)局部刷新,比如需要前后端交互等,這里呢分享局部刷新的兩種方法,主要用的是ajax里面的.load()。感興趣的朋友一起看看吧2017-06-06
基于jquery實(shí)現(xiàn)鼠標(biāo)左右拖動(dòng)滑塊滑動(dòng)附源碼下載
這篇文章主要介紹了基于jquery實(shí)現(xiàn)鼠標(biāo)左右拖動(dòng)滑塊滑動(dòng)附源碼下載 的相關(guān)資料,需要的朋友可以參考下2015-12-12

