Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Internet Explorer Javascript性能问题_Javascript_Internet Explorer_Performance - Fatal编程技术网

Internet Explorer Javascript性能问题

Internet Explorer Javascript性能问题,javascript,internet-explorer,performance,Javascript,Internet Explorer,Performance,Internet Explorer中的JavaScript性能很差。没有消息。然而,有一些提示和技巧可以加速它。例如,有这样一个例子。但我发现自己无法从中挤出像样的表现。也许你们中的一些人知道还有什么别的办法,这样做会更快 我想做的是用Javascript从头开始创建一个中等大小的表。比如说,300行,每行10个单元格。在我的电脑上做这个大约需要5-6秒。好吧,当然,这是一个5年的钻机,但这仍然太多。这是我的虚拟代码: <html> <body> <sc

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>

函数MakeTable(父级)
{
varⅠ,j;
var table=document.createElement('table');
var insertRow=table.insertRow;
对于(i=0;i<300;i++)
{
变量行=插入行(-1);
对于(j=0;j<10;j++)
{
变量单元格=行插入单元格(-1);
cell.innerHTML=i+'-'+j;
}
}
父.子(表);
}
点击我!

添加:Hmm,显然字符串连接(使用array.join)是唯一的方法。好吧,当然很伤心。希望以“适当”的方式完成任务。:)

您可以尝试“达夫设备”:通过多次重复代码来解开循环:

for (var i = 0; i < count / 4; i++) {
  doSomething();
  doSomething();
  doSomething();
  doSomething();
}
for(变量i=0;i
很明显,如果将余数除以4,那么原来的达夫设备就有了一种巧妙的方法,可以使用混合在循环中的switch语句跳转到循环的中间。Javascript不支持这一点,但您可以手动处理其余行。数字4也是随机的,数字本身可以通过性能测试得到


另请参见:

在寻找有关此问题的答案时,我发现了一个有趣的链接: 该页面使用五种不同的脚本/方法生成表格。
根据他们的测试,使用字符串比使用DOM/表元素快得多。
l

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

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

第一个提示已经存在。请参见-表在最后添加到DOM中。我现在正在探索innerHTML,它看起来确实快多了。是的,我应该提到这一点。但它并不总是更快,这就是为什么我要提到“基准测试!”第:-)部分