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