From fd180ff60c1609b431ac773b1ee84bca6b4fd09b Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Mon, 22 Jun 2020 13:35:51 -0400 Subject: [PATCH] Improve performance somewhat in some scenarios (re: #7656) --- modules/core/difference.js | 4 ++-- modules/core/tree.js | 3 ++- modules/osm/node.js | 15 ++++++--------- modules/svg/helpers.js | 20 +++++++++++--------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/modules/core/difference.js b/modules/core/difference.js index 425540226..c2a7c607b 100644 --- a/modules/core/difference.js +++ b/modules/core/difference.js @@ -57,8 +57,8 @@ export function coreDifference(base, head) { } } - Object.keys(head.entities).forEach(checkEntityID); - Object.keys(base.entities).forEach(checkEntityID); + for (var id in head.entities) checkEntityID(id); + for (var id in base.entities) checkEntityID(id); _diff.length = function length() { diff --git a/modules/core/tree.js b/modules/core/tree.js index d5c0bfc1f..674395500 100644 --- a/modules/core/tree.js +++ b/modules/core/tree.js @@ -68,9 +68,10 @@ export function coreTree(head) { var diff = coreDifference(head, graph); var changed = diff.didChange; + head = graph; + if (changed.addition || changed.deletion || changed.geometry) { var insertions = {}; - head = graph; if (changed.deletion) { diff.deleted().forEach(function(entity) { diff --git a/modules/osm/node.js b/modules/osm/node.js index 6dcc44ca1..7b42197ff 100644 --- a/modules/osm/node.js +++ b/modules/osm/node.js @@ -156,15 +156,12 @@ Object.assign(osmNode.prototype, { return resolver.transient(this, 'isConnected', function() { var parents = resolver.parentWays(this); - function isLine(entity) { - return entity.geometry(resolver) === 'line' && - entity.hasInterestingTags(); - } - - // vertex is connected to multiple parent lines - if (parents.length > 1 && parents.some(isLine)) { - return true; - + if (parents.length > 1) { + // vertex is connected to multiple parent ways + for (var i in parents) { + if (parents[i].geometry(resolver) === 'line' && + parents[i].hasInterestingTags()) return true; + } } else if (parents.length === 1) { var way = parents[0]; var nodes = way.nodes.slice(); diff --git a/modules/svg/helpers.js b/modules/svg/helpers.js index d878af9ef..8c946f6fd 100644 --- a/modules/svg/helpers.js +++ b/modules/svg/helpers.js @@ -26,18 +26,20 @@ export function svgPassiveVertex(node, graph, activeID) { var parents = graph.parentWays(node); - for (var i = 0; i < parents.length; i++) { - var nodes = parents[i].nodes; - var isClosed = parents[i].isClosed(); - for (var j = 0; j < nodes.length; j++) { // find this vertex, look nearby + var i, j, nodes, isClosed, ix1, ix2, ix3, ix4, max; + + for (i = 0; i < parents.length; i++) { + nodes = parents[i].nodes; + isClosed = parents[i].isClosed(); + for (j = 0; j < nodes.length; j++) { // find this vertex, look nearby if (nodes[j] === node.id) { - var ix1 = j - 2; - var ix2 = j - 1; - var ix3 = j + 1; - var ix4 = j + 2; + ix1 = j - 2; + ix2 = j - 1; + ix3 = j + 1; + ix4 = j + 2; if (isClosed) { // wraparound if needed - var max = nodes.length - 1; + max = nodes.length - 1; if (ix1 < 0) ix1 = max + ix1; if (ix2 < 0) ix2 = max + ix2; if (ix3 > max) ix3 = ix3 - max;