Почему IE9 занимает так много времени, чтобы выполнить JQuery? - PullRequest
2 голосов
/ 21 ноября 2011

У меня есть приложение, которое выполняет этот кусок кода (JQuery 1.4.2) на странице ASPX для каждого элемента в таблице HTML (500x)

$(".ArtRow_" + artId).each(function () {  
 if ($(this).find(".ArtOpen_" + artId).length <= 0) return; 
.... };

, пропуская строку с find, делаетэта страница загружается нормально, но с поиском:

  • firefox & chrome: + - 3 сек
  • в IE9: + - 42 сек (при использовании 50% ЦП на двухъядерном процессоре)

Я делал профиль в IE, и 95% времени IE выполняет функцию CLASS (стек вызовов: find.f.filter.CLASS)

Я пытался

  • с использованием идентификатора с находкой
  • конкатенация искомой строки с использованием фиксированного класса

безрезультатно (42 с)

Кто-нибудь знает?Заранее спасибо!

edit: Теперь я убежден, что каждый занимает так много времени.Я пропустил его, потому что с пустым блоком кода загрузка не заняла 42 с.Но с некоторыми комментариями, это заняло 42 секунды, так что я думаю, что это было не очень умное обнаружение мертвого кода.

по явному запросу: HTML-код, в котором живет ArtRow

 <tbody>
  <tr class="SB_ReceptielijstHeader">
    <th>Artikel / Bestelling</th>
    <th>Besteldatum</th>
    <th>Pr. School</th>
    <th>Pr. Levering</th>
    <th class="Number">Aantal besteld</th>
    <th class="Number">Aantal ontvangen</th>
  </tr>

  <tr class="SB_ReceptielijstArtikelHeader ArtRow_132109">
    <td id="Titel_132109" class="Artikel" colspan="5">
      <img src="images/SB/Icons/23-book.png" style="vertical-align:middle">&nbsp;9789030170433 - NANO 1</td>
      <td class="Number ArtikelTotal">
    <input type="hidden" value="132109" class="Artikel_Id">
      <input type="hidden" value="" id="ArtLevLn_132109">
        <input type="text" value="12" style="text-align:right" size="4" id="Aantal_132109" name="Aantal_132109" maxlength="4">
        </td>
      </tr>
      <tr class="SB_ReceptielijstRow ArtRow_132109 ArtRowInvisible">
        <td>Bestelling 81 / Lijn </td>
        <td>02/07/2010</td>
        <td>24,05</td>
        <td>22,85</td>
        <td class="ArtOpen_132109 Number">
        </td>
        <td id="ArtToew__132109" class="ArtToew ArtToew_132109 Number">
          <div style="display:none" class="ArtBestLn">
        <input type="hidden" value="">
        </div>
        <input type="text" style="text-align:right" size="4" id="Aantal_" name="Aantal_" maxlength="4"> 
        </td>
          </tr>

          <tr class="SB_ReceptielijstArtikelHeader ArtRow_134399">
        <td id="Titel_134399" class="Artikel" colspan="5">
          <img src="images/SB/Icons/23-book.png" style="vertical-align:middle">&nbsp;9789045533322 - HANDELWIJS 3 INCL CDROM HERWERKT 2010</td>
          <td class="Number ArtikelTotal">
            <input type="hidden" value="134399" class="Artikel_Id">
              <input type="hidden" value="" id="ArtLevLn_134399">
            <input type="text" value="25" style="text-align:right" size="4" id="Aantal_134399" name="Aantal_134399" maxlength="4">
            </td>
              </tr>
              <tr class="SB_ReceptielijstRow ArtRow_134399 ArtRowInvisible">
            <td>Bestelling 81 / Lijn </td>
            <td>02/07/2010</td>
            <td>23,95</td>
            <td>23,60</td>
            <td class="ArtOpen_134399 Number">
            </td>
            <td id="ArtToew__134399" class="ArtToew ArtToew_134399 Number">
              <div style="display:none" class="ArtBestLn">
                <input type="hidden" value="">
                </div>
                <input type="text" style="text-align:right" size="4" id="Aantal_" name="Aantal_" maxlength="4"> 
                </td>
              </tr>

            </tbody>

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Я не могу изобразить код ниже, который обрабатывается иначе, чем выше .find, но вы также можете попробовать:

$(".ArtOpen_" + artId, this)

Выбор материала по классу, однако, интенсивный. Для этого нет встроенной поддержки javascript, и все узлы должны быть изучены, чтобы выяснить, у кого есть этот класс. Выполняя его 500 раз, ...

2 голосов
/ 21 ноября 2011

Это медленно, потому что он выполняет этот код 500 раз.

Я предполагаю, что это не тот ответ, который вы ищете, поэтому, если бы вы могли опубликовать свою HTML-структуру, мы увидим, есть ли способ оптимизироватьселекторы, которые вы использовали, чтобы сделать это быстрее.

...