Très bien, je pensais que j'avais tout ce setTimeout chose parfaite, mais je semble être horriblement trompé. J'utilise excanvas et javascript pour dessiner une carte de mon état d'origine, mais la procédure de dessin étouffe le navigateur. À l'heure actuelle, je suis obligé de me tourner vers IE6 parce que je suis dans une grande organisation, ce qui est probablement une grande partie de la lenteur. Donc, ce que je pensais faire est de construire une procédure appelée distributedDrawPolys (j'utilise probablement le mauvais mot là-bas, donc ne vous concentrez pas sur le mot distribué) qui fait ressortir les polygones d'un tableau global afin de dessiner 50 d'entre eux à la fois.setTimeout en javascript ne donnant pas le navigateur «salle de respiration»
Ceci est la méthode qui pousse les polygones sur le tableau global et exécute le setTimeout:
for (var x = 0; x < polygon.length; x++) {
coordsObject.push(polygon[x]);
fifty++;
if (fifty > 49) {
timeOutID = setTimeout(distributedDrawPolys, 5000);
fifty = 0;
}
}
Je mis une alerte à la fin de cette méthode, il fonctionne dans pratiquement une seconde.
La méthode distribuée ressemble:
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)");
}
}
}
}
}
Edit: fixe le format
donc je pensais que la méthode setTimeout permettrait au site de dessiner les polygones en groupes afin que les utilisateurs seraient en mesure d'interagir avec la page alors qu'il dessinait encore. Qu'est-ce que je fais mal ici?
Le navigateur est toujours verrouillé quand je lance le code comme ceci:/(Je mets aussi le settimeout à l'intérieur de l'instruction if) –
Oups désolé. J'ai oublié les guillemets. Essayez à nouveau s'il vous plaît – jitter
EDIT - NVM Je suis un idiot! Merci!!! –