为什么IE9花了这么长时间来执行一些JQuery?

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

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

find行会使这个页面正常加载,但是用find:

  • firefox&chrome:+ - 3秒
  • 在IE9中:+ - 42秒(在双核上使用50%cpu)
  • 我在IE中做了一个配置文件,并且95%的时间,IE正在执行函数CLASS (调用堆栈: find.f.filter.CLASS

    我试过了

  • 使用Id查找
  • 通过使用一个固定的类来重新初始化字符串连接
  • 无济于事(42s)

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

    编辑:我现在相信,每个人都花了这么长时间。 我跳过它,因为空代码块没有花费42秒加载。 但是有一些评论int,它又花了42s,所以我想这是一种不是非常聪明的死码检测。

    明确要求: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>
    

    这很慢,因为它正在运行该代码500次。

    我认为这并不是你要找的答案,所以如果你可以发布你的HTML结构,我们可以看看是否有一种方法来优化你用来加快速度的选择器。


    我无法将下面的代码映射到与上述.find不同的代码中,但您也可以尝试:

    $(".ArtOpen_" + artId, this)
    

    然而,按类提取东西是密集型的。 没有原生的javascript支持,所有节点都必须经过检查才能确定哪个类具有该类。 执行500次,...

    链接地址: http://www.djcxy.com/p/43671.html

    上一篇: Why is IE9 taking so long to execute some JQuery?

    下一篇: Remove space between 2 tables HTML CSS and image removes background image