为什么IE9需要这么长时间来执行一些JQuery?

时间:2011-11-21 16:59:05

标签: javascript jquery internet-explorer-9

我有一个应用程序在ASPX页面中为HTML表格中的每个元素(500x)执行这段代码(JQuery 1.4.2)

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

省略find行会使此页面正常加载,但使用find:

  • firefox&amp;铬:+ - 3秒
  • 在IE9中
  • :+ - 42秒(在双核上使用50%cpu)

我在IE中做过个人资料,95%的时间,IE正在执行函数CLASS(调用堆栈:find.f.filter.CLASS

我试过

  • 使用带有查找的ID
  • 使用固定类
  • 终止字符串连接

无济于事(42s)

任何人都有线索?提前谢谢!

编辑:我现在确信每个人都花了这么长时间。我跳过它,因为空代码块没有花费42秒来加载。但是有了一些注释,它又花了42秒,所以我想这是一种不太智能的死代码检测。

关于显式请求:ArtRow所在的HTML

 <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 个答案:

答案 0 :(得分:2)

它很慢,因为它运行了500次代码。

我认为这不是你正在寻找的答案,所以如果你可以发布你的HTML结构,我们可以看看是否有办法优化你用来加快它的选择器。

答案 1 :(得分:2)

我无法将以下代码的处理方式与上述.find进行不同的处理,但您也可以尝试:

$(".ArtOpen_" + artId, this)

然而,按类提取东西是非常密集的。没有本机javascript支持,必须检查所有节点以确定哪个类具有该类。执行500次,......