avoid rendering small fields and links for improved perf. This change is experimental, so please report any rendering issues that could be related to this.

This commit is contained in:
Stefan Breunig
2013-02-24 10:54:08 +01:00
parent b10fedf887
commit f213a481e8

View File

@ -484,9 +484,19 @@ window.renderLink = function(ent) {
weight:2, weight:2,
clickable: false, clickable: false,
guid: ent[0], guid: ent[0],
smoothFactor: 10 smoothFactor: 0 // doesnt work for two points anyway, so disable
}); });
// determine which links are very short and dont render them at all.
// in most cases this will go unnoticed, but improve rendering speed.
poly._map = window.map;
poly.projectLatlngs();
var op = poly._originalPoints;
var dist = Math.abs(op[0].x - op[1].x) + Math.abs(op[0].y - op[1].y);
if(dist <= 10) {
return;
}
if(!getPaddedBounds().intersects(poly.getBounds())) return; if(!getPaddedBounds().intersects(poly.getBounds())) return;
poly.on('remove', function() { delete window.links[this.options.guid]; }); poly.on('remove', function() { delete window.links[this.options.guid]; });
@ -515,16 +525,27 @@ window.renderField = function(ent) {
[reg.vertexB.location.latE6/1E6, reg.vertexB.location.lngE6/1E6], [reg.vertexB.location.latE6/1E6, reg.vertexB.location.lngE6/1E6],
[reg.vertexC.location.latE6/1E6, reg.vertexC.location.lngE6/1E6] [reg.vertexC.location.latE6/1E6, reg.vertexC.location.lngE6/1E6]
]; ];
var poly = L.polygon(latlngs, { var poly = L.polygon(latlngs, {
fillColor: COLORS[team], fillColor: COLORS[team],
fillOpacity: 0.25, fillOpacity: 0.25,
stroke: false, stroke: false,
clickable: false, clickable: false,
smoothFactor: 10, smoothFactor: 0, // hiding small fields will be handled below
vertices: ent[2].capturedRegion, vertices: reg,
lastUpdate: ent[1], lastUpdate: ent[1],
guid: ent[0]}); guid: ent[0]});
// determine which fields are too small to be rendered and dont
// render them, so they dont count towards the maximum fields limit.
// This saves some DOM operations as well, but given the relatively
// low amount of fields there isnt much to gain.
// The algorithm is the same as used by Leaflet.
poly._map = window.map;
poly.projectLatlngs();
var count = L.LineUtil.simplify(poly._originalPoints, 6).length;
if(count <= 2) return;
if(!getPaddedBounds().intersects(poly.getBounds())) return; if(!getPaddedBounds().intersects(poly.getBounds())) return;
poly.on('remove', function() { delete window.fields[this.options.guid]; }); poly.on('remove', function() { delete window.fields[this.options.guid]; });