Помогите мне оптимизировать этот jQuery: есть селектор - PullRequest
1 голос
/ 19 октября 2010

Я использую dynaTrace для профилирования своего приложения в Internet Explorer.

Один из самых дорогих звонков:

$("div.containerClass:has(div.containerHeader)")

Я выделил селектор следующим образом, что дало небольшое улучшение:

$("div.containerClass:has(div.containerHeader)", "#section-wrapper")

Как еще улучшить производительность?

ПРИМЕЧАНИЕ. Я не могу изменить разметку HTML, только JavaScript.

Я использую jQuery 1.4.2.

UDPATE Вот пример HTML ... обратите внимание, что в моем реальном приложении HTML является динамическим, и фактическая разметка будет отличаться:

<div id="section-wrapper">
    <div class="somethingelse">
        <div class="somethingelse2">
            <div class="containerClass"> 
            <div class="containerHeader"> 
              <h2>content region 1</h2> 
            </div> 
            </div> 

            <div class="containerClass"> 
            <div> 
              <h2>content region 2</h2> 
            </div> 
            </div> 

            <div class="containerClass"> 
            <div class="containerHeader"> 
              <h2>content region3 </h2> 
            </div> 
            </div> 

            <div class="containerClass"> 
            <div class="containerHeader"> 
              <h2>content region 4</h2> 
            </div> 
        </div> 
    </div>
</div>

Ответы [ 2 ]

2 голосов
/ 19 октября 2010

Вы должны использовать один селектор, например:

$("#section-wrapper div.containerClass:has(div.containerHeader)")

В противном случае вы запускаете несколько объектов jQuery только для выполнения поиска.Вам придется протестировать, но в зависимости от DOM, с которым вы работаете, это может быть намного быстрее (особенно в jQuery 1.4.3 +):

$("#section-wrapper div.containerHeader").closest("div.containerClass")
1 голос
/ 19 октября 2010

Хотя было бы глупо, если бы это действительно было быстрее, вы пробовали:

$("div.containerClass > div.containerHeader").parents('div.containerClass')

при редактировании: добавлен родительский селектор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...