Speed up geometry rendering with VML by replacing string concatenation by array

concatenation and joining. Thanks tschaub for the patch optimization and
review. (Closes #1095)



git-svn-id: http://svn.openlayers.org/trunk/openlayers@5392 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Frédéric Junod
2007-12-13 10:24:51 +00:00
parent 8f1bca93b1
commit 7063cdab3a

View File

@@ -460,19 +460,18 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
this.setNodeDimension(node, geometry);
var resolution = this.getResolution();
var numComponents = geometry.components.length;
var parts = new Array(numComponents);
var path = "m";
for (var i = 0; i < geometry.components.length; i++) {
var x = (geometry.components[i].x/resolution);
var y = (geometry.components[i].y/resolution);
path += " " + x.toFixed() + "," + y.toFixed() + " l ";
var comp, x, y;
for (var i = 0; i < numComponents; i++) {
comp = geometry.components[i];
x = (comp.x/resolution);
y = (comp.y/resolution);
parts[i] = " " + x.toFixed() + "," + y.toFixed() + " l ";
}
if (closeLine) {
path += " x";
}
path += " e";
node.path = path;
var end = (closeLine) ? " x e" : " e";
node.path = "m" + parts.join("") + end;
},
/**
@@ -488,23 +487,25 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
var resolution = this.getResolution();
var path = "";
var path = [];
var linearRing, i, comp, x, y;
for (var j = 0; j < geometry.components.length; j++) {
var linearRing = geometry.components[j];
linearRing = geometry.components[j];
path += "m";
for (var i = 0; i < linearRing.components.length; i++) {
var x = linearRing.components[i].x / resolution;
var y = linearRing.components[i].y / resolution;
path += " " + x.toFixed() + "," + y.toFixed();
path.push("m");
for (i = 0; i < linearRing.components.length; i++) {
comp = linearRing.components[i];
x = comp.x / resolution;
y = comp.y / resolution;
path.push(" " + x.toFixed() + "," + y.toFixed());
if (i==0) {
path += " l";
path.push(" l");
}
}
path += " x ";
path.push(" x ");
}
path += "e";
node.path = path;
path.push("e");
node.path = path.join("");
},
/**
@@ -537,20 +538,22 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
var resolution = this.getResolution();
var path = "";
var path = [];
var comp, x, y;
for (var i = 0; i < geometry.components.length; i++) {
var x = geometry.components[i].x / resolution;
var y = geometry.components[i].y / resolution;
comp = geometry.components[i];
x = comp.x / resolution;
y = comp.y / resolution;
if ((i%3)==0 && (i/3)==0) {
path += "m";
path.push("m");
} else if ((i%3)==1) {
path += " c";
path.push(" c");
}
path += " " + x + "," + y;
path.push(" " + x + "," + y);
}
path += " x e";
path.push(" x e");
node.path = path;
node.path = path.join("");
},
CLASS_NAME: "OpenLayers.Renderer.VML"