Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
Javascript 在循环中使用innerHTML会挂起UI(有时是无响应的页面),但在循环外使用相同的innerHTML不会挂起UI_Javascript_Jquery_Html - Fatal编程技术网

Javascript 在循环中使用innerHTML会挂起UI(有时是无响应的页面),但在循环外使用相同的innerHTML不会挂起UI

Javascript 在循环中使用innerHTML会挂起UI(有时是无响应的页面),但在循环外使用相同的innerHTML不会挂起UI,javascript,jquery,html,Javascript,Jquery,Html,我在回答一个问题,所以: 在这一点上,我遇到了javascript的奇怪工作方式 假设我们要动态添加MXN M=行,N=列 然后我们可以这样做: var count = 0; function addTbl(m, n) { var div = document.getElementById("tbl_div"); div.innerHTML = ""; for (var i = 0; i < m; i++) { for (var j = 0; j < n; j+

我在回答一个问题,所以:

在这一点上,我遇到了javascript的奇怪工作方式

假设我们要动态添加MXN M=行,N=列

然后我们可以这样做:

var count = 0;

function addTbl(m, n) {
  var div = document.getElementById("tbl_div");
  div.innerHTML = "";
  for (var i = 0; i < m; i++) {
    for (var j = 0; j < n; j++) {
      count++;
      div.innerHTML += "<div>" + count + "</div>";
    }
  }
}
这看起来很好,当M,N很低时效果很好,比如说<50。但当它超过这个限制时,它就会挂起UI并使页面无响应

但是

为了使其适用于更高的维度,我使用了:

var count = 0;

function addTbl(m, n) {
  var div = document.getElementById("tbl_div");
  div.innerHTML = "";
  var p = "";
  for (var i = 0; i < m; i++) {
    for (var j = 0; j < n; j++) {
      count++;
      p += "<div>" + count + "</div>";
    }
  }
  div.innerHTML = "" + p + "";
}
它工作良好,测试高达250X250

为什么呢

这是否意味着.innerHTML速度较慢?还是别的什么


希望这里的专家能帮助我。提前感谢。

正如第一个示例中的注释所指出的,您每个周期都在更新DOM。在第二个例子中,这种情况只发生一次


因此innerHTML并不慢,但每次使用它时,您都可以将其视为浏览器正在重新绘制页面,经常使用时会使用更多的资源

innerHTML在每次迭代时更新DOM。使用字符串连接,只需更新DOM一次。更新DOM需要一些资源到浏览器重新绘制UI…A。沃尔夫是完全正确的。你应该阅读浏览器回流。