From 304805c11365da8efd2f5fbf41e44d88e9f55965 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Tue, 11 Dec 2012 17:27:37 -0500 Subject: [PATCH 1/4] Fix frantic tile reloading. Fixes #253 --- js/id/connection.js | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/js/id/connection.js b/js/id/connection.js index 33cc038a6..642ece16b 100644 --- a/js/id/connection.js +++ b/js/id/connection.js @@ -5,8 +5,8 @@ iD.Connection = function() { connection = {}, refNodes = {}, user = {}, - apiTilesLoaded = {}, - inflight = {}, + inflight = [], + loadedTiles = {}, oauth = iD.OAuth().api(apiURL); function bboxUrl(b) { @@ -14,16 +14,17 @@ iD.Connection = function() { } function bboxFromAPI(box, callback) { - loadFromURL(bboxUrl(box), callback); + loadFromURL(bboxUrl(box), function(err, parsed) { + loadedTiles[box] = true; + callback(err, parsed); + }); } function loadFromURL(url, callback) { - inflight[url] = d3.xml(url).get() + inflight.push(d3.xml(url).get() .on('load', function(dom) { - delete inflight[url]; - apiTilesLoaded[url] = true; return callback(null, parse(dom)); - }); + })); } function getNodes(obj) { @@ -146,9 +147,9 @@ iD.Connection = function() { } function tileAlreadyLoaded(c) { - if (apiTilesLoaded[bboxUrl(c)] || inflight[bboxUrl(c)]) return false; + if (loadedTiles[c]) return false; for (var i = 0; i < 4; i++) { - if (apiTilesLoaded[tileAtZoom(c, -i)]) return false; + if (loadedTiles[tileAtZoom(c, -i)]) return false; } return true; } @@ -175,16 +176,16 @@ iD.Connection = function() { projection.invert([x + ts, y + ts])]; } + inflight.map(function(i) { + i.abort(); + }); + inflight = []; + var q = queue(2); var bboxes = tiles - .filter(tileAlreadyLoaded) - .map(apiExtentBox); - - _.difference(_.keys(inflight), bboxes.map(bboxUrl)).forEach(function(d) { - inflight[d].abort(); - delete inflight[d]; - }); + .map(apiExtentBox) + .filter(tileAlreadyLoaded); bboxes.forEach(function(e) { q.defer(bboxFromAPI, e); @@ -211,7 +212,7 @@ iD.Connection = function() { }; connection.flush = function() { - apiTilesLoaded = {}; + loadedTiles = {}; return connection; }; From d70202253b3d4ce2bd9124fff141cd55bfe325ae Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Tue, 11 Dec 2012 17:35:42 -0500 Subject: [PATCH 2/4] Remove queueing, it was too large a performance hit --- js/id/connection.js | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/js/id/connection.js b/js/id/connection.js index 642ece16b..76eb80a9a 100644 --- a/js/id/connection.js +++ b/js/id/connection.js @@ -181,21 +181,14 @@ iD.Connection = function() { }); inflight = []; - var q = queue(2); - - var bboxes = tiles + tiles .map(apiExtentBox) - .filter(tileAlreadyLoaded); - - bboxes.forEach(function(e) { - q.defer(bboxFromAPI, e); - }); - - q.awaitAll(function(err, res) { - var g = iD.Graph(); - if (res) res.forEach(function(r) { g = g.merge(r); }); - event.load(err, g); - }); + .filter(tileAlreadyLoaded) + .forEach(function(e) { + bboxFromAPI(e, function(err, g) { + event.load(err, g); + }); + }); } connection.url = function(_) { From 4bef54e0f57aeb8f00b4a4b8587844d66e8f9d65 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Tue, 11 Dec 2012 17:40:33 -0500 Subject: [PATCH 3/4] Microoptimize --- js/id/connection.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/id/connection.js b/js/id/connection.js index 76eb80a9a..dd156f9d4 100644 --- a/js/id/connection.js +++ b/js/id/connection.js @@ -28,7 +28,7 @@ iD.Connection = function() { } function getNodes(obj) { - var nodes = [], nelems = obj.getElementsByTagName('nd'); + var nelems = obj.getElementsByTagName('nd'), nodes = new Array(nelems.length); for (var i = 0, l = nelems.length; i < l; i++) { nodes[i] = 'n' + nelems[i].attributes.ref.nodeValue; refNodes['n' + nelems[i].attributes.ref.nodeValue] = true; @@ -46,8 +46,8 @@ iD.Connection = function() { } function getMembers(obj) { - var members = [], - elems = obj.getElementsByTagName('member'); + var elems = obj.getElementsByTagName('member'), + members = new Array(elems.length); for (var i = 0, l = elems.length; i < l; i++) { members[i] = { From 60d7db1b95fc9974f2dd49dbea3ecbac86f73ebb Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Tue, 11 Dec 2012 18:06:13 -0500 Subject: [PATCH 4/4] Remove font-rendering tweaks, same as 3192ceed5ff420f04c369ebe75534f24cb3b418c --- css/app.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/css/app.css b/css/app.css index a82ddaf86..b66d1453a 100644 --- a/css/app.css +++ b/css/app.css @@ -6,8 +6,8 @@ body { margin:0; padding:0; color:#222; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: subpixel-antialiased; + /* text-rendering: optimizeLegibility; + -webkit-font-smoothing: subpixel-antialiased; */ } * {