编程语言
首页 > 编程语言> > javascript中的setTimeout没有给浏览器’呼吸空间’

javascript中的setTimeout没有给浏览器’呼吸空间’

作者:互联网

好吧,我以为我的整个setTimeout事情很完美,但我似乎非常错误.

我正在使用excanvas和javascript绘制我的家庭状态的地图,但是绘图程序会扼杀浏览器.现在我被迫迎合IE6,因为我是一个大型组织,这可能是缓慢的很大一部分.

所以我认为我要做的是构建一个名为distributedDrawPolys的程序(我可能在那里使用了错误的单词,所以不要专注于分布式单词),这基本上会从全局数组中弹出多边形以便绘制50他们一次.

这是将多边形推送到全局数组并运行setTimeout的方法:

 for (var x = 0; x < polygon.length; x++) {
      coordsObject.push(polygon[x]);
      fifty++;
      if (fifty > 49) {
           timeOutID = setTimeout(distributedDrawPolys, 5000);
           fifty = 0;
      }
 }

我在该方法结束时发出警报,它几乎在一秒钟内运行.

分布式方法如下:

 function distributedDrawPolys()
 {
      if (coordsObject.length > 0) {
           for (x = 0; x < 50; x++) { //Only do 50 polygons
                var polygon = coordsObject.pop();
                var coordinate = polygon.selectNodes("Coordinates/point");
                var zip = polygon.selectNodes("ZipCode");
                var rating = polygon.selectNodes("Score");
                if (zip[0].text.indexOf("HH") == -1) {
                     var lastOriginCoord = [];
                     for (var y = 0; y < coordinate.length; y++) {
                          var point = coordinate[y];
                          latitude = shiftLat(point.getAttribute("lat"));
                          longitude = shiftLong(point.getAttribute("long"));
                          if (y == 0) {
                               lastOriginCoord[0] = point.getAttribute("long");
                               lastOriginCoord[1] = point.getAttribute("lat");
                          }
                          if (y == 1) {
                               beginPoly(longitude, latitude);
                          }
                          if (y > 0) {
                               if (translateLongToX(longitude) > 0 && translateLongToX(longitude) < 800 && translateLatToY(latitude) > 0 && translateLatToY(latitude) < 600) {
                                    drawPolyPoint(longitude, latitude);
                               }
                          }
                     }
                     y = 0;
                     if (zip[0].text != targetZipCode) {
                          if (rating[0] != null) {
                               if (rating[0].text == "Excellent") {
                                    endPoly("rgb(0,153,0)");
                               }
                               else if (rating[0].text == "Good") {
                                    endPoly("rgb(153,204,102)");
                               }
                               else if (rating[0].text == "Average") {
                                    endPoly("rgb(255,255,153)");
                               }
                          }
                          else { endPoly("rgb(255,255,255)"); }
                     }
                     else {
                     endPoly("rgb(255,0,0)");
                     }
                }
           }
      }
 }

编辑:修复格式

所以我认为setTimeout方法允许网站在组中绘制多边形,这样用户就可以在页面仍在绘制时与页面进行交互.我在这做错了什么?

解决方法:

将代码更改为

for (var x = 0; x < polygon.length; x++) {
    coordsObject.push(polygon[x]);
}
distributedDrawPolys();

function distributedDrawPolys()
{
    if (coordsObject.length > 0) {
        for (x = 0; x < 50; x++) {
            ...
        }
        setTimeout("distributedDrawPolys()", 5000); //render next 50 polys in 5 sec
    }
}

标签:javascript,xml,settimeout,excanvas,census
来源: https://codeday.me/bug/20190717/1484654.html