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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user