1. 程式人生 > >css選擇器與JQ選擇器的效能比對與優化方案

css選擇器與JQ選擇器的效能比對與優化方案

css和JQ的選擇器寫起來似乎很相似,但他們的寫法在效能上有一定的區別。

以下就較為常用的選擇器進行比對和優化:

CSS選擇器

效率高到低:

1.id選擇器(#id)

2.類選擇器(.class

3.標籤選擇器(div,h1,p)

4.後代選擇器(li a)

優化方案:

1.優先考慮用class選擇器,雖然id選擇器效率最高,但id選擇的唯一性,需謹慎使用。

2.使用id或者class選擇器時,勿再加類名或者標籤名。例如

/*bad*/

div#id{}

p.class{}

.class1.class2{}

/*good*/

#id{}

.class{}

.class2{}

3.把多層標籤選擇規則用class替換。例如

/*bad*/

div>input[type="button"]{}

/*good*/

.input-btn{}

4.少用後代選擇器,尤其是和標籤或者萬用字元一起使用。例如

/*bad*/

ul li *{}

/*good*/

.list-in{}

JQ選擇器

效率高到低:

1.id選擇器$('#id') 

2.標籤選擇器$('div'):它直接來自原生的Javascript方法getElementByTagName()。

3.類選擇器$('.class'):class選擇器是最慢的,因為在IE瀏覽器下它會遍歷所有的DOM節點。儘量避免使用class選擇器。

4.find(),next(),children()等函式

5.後代選擇器$('ul a')

優化方案:1.用id最優2.標籤來修飾class,例如

$(' .class')//bad

$('div.class')//good

注意:勿用標籤來修飾id,效率低;勿用ID來修飾ID。例如

$('#id #id_in')//bad

$('div#id_in')//bad

$('#id_in')//good

3.將已遍歷的之後會用到的物件賦值給一個引數,快取起來,之後就不必重新遍歷。例

var obj= $('div.class');//obj就是快取起來的物件

obj.find('li').addClass('.on');

4.儘量使用jq提供的find(),next(),children()等函式將進行遍歷,少用高階選擇器。例如

$('#di li')//bad

$('#div').find('li')//good

5.使用鏈式操作,避免多次遍歷物件。例如

$('#id').addClass('.on').click(function(){});

參考網站css選擇器效能詳情可連結:http://www.aliued.cn/2013/01/24/網站css選擇器效能討論.html 
JQ選擇器效能優化方案參考連結:http://blog.163.com/[email protected]/blog/static/18046981201322311438610/