2014-08-28 59 views
0

有沒有人測試過使用css nth-child(奇數)選擇器vs javascript的性能,如果你正在構建x元素列表並且想要設置奇數編號元素?CSS第n個孩子(單數)vs Javascript性能

類似以下內容:

CSS:

#some-list li:nth-child(odd) { 
    color: #f00; 
} 

JS:

var theList = document.getElementById('some-list'), 
    stuff = ['a', 'b', 'c', 'd', 'e', 'f', 'g'], 
    listLen = stuff.length, 
    i = 0, 
    someContent = ''; 

while(i < listLen) { 
    someContent += '<li>' + stuff[i] + '</li>'; 
    i += 1; 
} 

theList.innerHTML = someContent; 

對戰的類似性能:

CSS:

#some-list .is-odd { 
    color: #f00; 
} 

JS:

var theList = document.getElementById('some-list'), 
    stuff = ['a', 'b', 'c', 'd', 'e', 'f', 'g'], 
    listLen = stuff.length, 
    i = 0, 
    someContent = '', 
    isOdd = ' class="is-odd"'; 

while(i < listLen) { 
    someContent += '<li' + isOdd + '>' + stuff[i] + '</li>'; 
    isOdd = (isOdd !== '') ? '' : ' class="is-odd"'; 
    i += 1; 
} 

theList.innerHTML = someContent; 
+5

好吧,是嗎? – BoltClock 2014-08-28 19:42:50

+2

CSS很可能每次都會贏,因爲它不需要對DOM進行任何更改。 – adeneo 2014-08-28 19:43:08

+0

這不是一個公開討論板。 1 question => 1有用的答案 – 2014-08-28 19:43:33

回答

1

我已經運行在jsperf測試!請看看它:

http://jsperf.com/childperformance1

對於樣品,我只用2列表下的子元素。您可以添加更多的子元素並嘗試對它們進行測試!

+0

您的jsperf不包含CSS。當然,第二個代碼有更多的指令,速度較慢。 – Oriol 2014-08-28 19:49:13

+0

我已經在html中添加了CSS。我不認爲CSS會產生什麼大的影響! – 2014-08-28 19:51:59

+0

是的,問題是jsperf沒有根據CSS樣式來測量渲染元素所需的時間。 – Oriol 2014-08-28 20:09:30