3

このjsperfテストのスニペットの1つが他のスニペットよりも大幅に遅いように見える理由を理解しようとしています.

これらは 4 つのスニペットです。

$(".menu-vertical li.selected > ul.static").show().parents().show();

$('ul.root').find('li.selected').children('ul.static').show().parents().show();

$("ul.root li.selected > ul.static").show().parents().show();

$('ul.root li.selected').children('ul.static').show().parents().show();

2 番目のものは、すべてのブラウザで一貫して遅いようで、その理由がわかりません。

4

2 に答える 2

3

2番目が他と違うのは何ですか?

$('ul.root')               // you get the collection of all `ul.root`
    .find('li.selected')   // in each collection you search for `li.selected`
    .children('ul.static') // you get `ul.static` children elements of each found
    ...

何回繰り返す必要があるかに注意してください。他のすべての例では、ほとんどの検索は単一のクエリで実行され、何倍も速く評価されます。

于 2012-12-05T14:12:04.140 に答える
0

子供の数は重要です。

多くの(たとえば> 10)子供$el.find('> selector')はより良い成績を収めます

数人の子供がいると、$el.children('selector')パフォーマンスが向上します。

これは、 children() がすべての子を繰り返し処理して、指定されたセレクターをテストするためです。

于 2015-12-21T12:37:22.070 に答える