2015-04-01 125 views
0

我有一個頁面,使用jQuery,並可以在某些情況下運行速度非常慢,我試圖用Firebug和Firequery進行配置。我已經讓它運行,使用的網頁...當我得到的結果,我看到正在消耗CPU時間最多的功能是:分析jQuery:如何解釋結果

elementMatcher/<  (jquery-2.1.0.js (línea 2113)) 
Sizzle</Sizzle.selectors.filter.ATTR/<   (jquery-2.1.0.js (línea 1617)) 
Sizzle</Sizzle.attr   (jquery-2.1.0.js (línea 1407)) 
matcherFromGroupMatchers/superMatcher  (jquery-2.1.0.js (línea 2297)) 

好。現在...什麼?基於這些數據,我如何知道哪些選擇器佔用了最多的CPU?

(我懷疑我將不得不重新編寫一些正在使用的屬性,現在,基於該Sizzle</Sizzle.selectors.filter.ATTR/<東西選擇的,但除此之外,還有沒有更多的信息我能得到什麼?)

+2

這是該走的時候jQuery的選擇器引擎。沒有看到你的代碼,那麼我們很難指導你做什麼。我想你需要通過緩存或改進邏輯來優化你選擇的元素。 – 2015-04-01 12:38:03

+0

我確實有一些形式爲'$(「select [name = blabla]」)。find(「:selected」)'的選擇器,在我的頁面中選擇名爲「blabla」的下拉列表。我正確地猜測那些jQuery試圖使用'Sizzle PaulJ 2015-04-01 12:46:54

回答

1

探討進一步觸發Sizzle</Sizzle.selectors.filter.ATTR的呼叫,您可以右鍵單擊該呼叫並從上下文菜單中選擇設置斷點,然後再次觸發您之前執行的操作。 (也許一個頁面重新加載在這之前需要。)

雖然改善提到選擇的速度,可能當你寫這會更快:

$("select[name=blabla] > :selected"); 

此外,你還可以通過添加提高性能ID爲<select>和查詢,像這樣:

$("#blabla > :selected"); 

這可能是更快使用純JavaScript,而不是jQuery的,你可以這樣做:

document.querySelector("#blabla > [selected]"); 

或像這樣:

var blabla = document.getElementById("blabla"); 
blabla.options[blabla.selectedIndex];