繁体   English   中英

Internet Explorer Javascript性能问题

[英]Internet Explorer Javascript performance problem

Internet Explorer中的JavaScript性能很糟糕。 没有新闻。 然而,有一些提示和技巧来加快它。 例如,有这 部分 系列 我仍然发现自己无法从中挤出体面的表现。 也许你们中的一些人知道还有什么可以做的,所以它更快?

我想要做的是在Javascript中从头开始创建一个中等大小的表。 比方说,300行,每行10个单元格。 我的电脑需要大约5-6秒才能完成此操作。 好的,授予,这是一个5岁的钻机,但仍然太多了。 这是我的虚拟代码:

<html>
  <body>
    <script type="text/javascript">
      function MakeTable(parent)
      {
        var i, j;
        var table = document.createElement('table');
        var insertRow = table.insertRow;
        for ( i = 0; i < 300; i++ )
        {
          var row = insertRow(-1);
          for ( j = 0; j < 10; j++ )
          {
            var cell = row.insertCell(-1);
            cell.innerHTML = i + ' -  ' + j;
          }
        }
        parent.appendChild(table);
      }
    </script>
    <div onclick="MakeTable(this);">Click Me!</div>
  </body>
</html>

补充:嗯,显然字符串连接(使用array.join)是唯一的方法。 好吧,伤心,当然。 希望这样做是“正确的”DOM方式。 :)

这是我在寻找答案时发现的一个有趣链接:该页面使用五种不同的脚本/方法来生成表格。
根据他们的测试,使用字符串远比使用DOM / Table元素快。 http://www.quirksmode.org/dom/innerhtml.htm l

IE的性能问题的主要原因之一是DOM操作。 您希望尽可能高效地执行DOM操作。 这可能包括,取决于您的情况(基准!):

  • 离线创建DOM结构; 将顶级元素保留在文档之外(创建但不附加),然后在文档准备好时将其附加到文档中,而不是在创建文档时将每个元素附加到DOM中
  • 编写innerHTML而不是DOM操作

你可以尝试'Duff的设备':通过多次重复代码来展开循环:

for (var i = 0; i < count / 4; i++) {
  doSomething();
  doSomething();
  doSomething();
  doSomething();
}

显然这会将余数除以4,原始的Duff设备有一个聪明的方法,使用与循环混合的switch语句跳转到循环的中间。 Javascript不支持此功能,但您可以手动处理其余行。 数字4也是随机的,数字本身可以通过性能测试得出。

另见: http//www.websiteoptimization.com/speed/10/10-3.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM