Skip to content

Commit 6fa6e04

Browse files
committed
Remember last non-null following sibling.
This way, we don’t rescan the same null elements.
1 parent 99f6e65 commit 6fa6e04

4 files changed

Lines changed: 10 additions & 4 deletions

File tree

d3.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -924,9 +924,12 @@ d3 = function() {
924924
return d3_selectionPrototype.insert.call(this, name, before);
925925
};
926926
function d3_selection_enterInsertBefore(enter) {
927+
var i0, j0;
927928
return function(d, i, j) {
928929
var group = enter[j].update, n = group.length, node;
929-
while (++i < n && !(node = group[i])) ;
930+
if (j != j0) j0 = j, i0 = 0;
931+
if (i >= i0) i0 = i + 1;
932+
while (!(node = group[i0]) && ++i0 < n) ;
930933
return node;
931934
};
932935
}

d3.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/selection/enter-insert.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@ d3_selection_enterPrototype.insert = function(name, before) {
77
};
88

99
function d3_selection_enterInsertBefore(enter) {
10+
var i0, j0;
1011
return function(d, i, j) {
1112
var group = enter[j].update,
1213
n = group.length,
1314
node;
14-
while (++i < n && !(node = group[i]));
15+
if (j != j0) j0 = j, i0 = 0;
16+
if (i >= i0) i0 = i + 1;
17+
while (!(node = group[i0]) && ++i0 < n);
1518
return node;
1619
};
1720
}

test/selection/insert-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ suite.addBatch({
120120
return body;
121121
},
122122
"inserts before the following updating sibling": function(body) {
123-
var data = ["peach", "apple", "banana", "orange", "apricot"];
123+
var data = ["peach", "apple", "apple2", "apple3", "banana", "orange", "apricot"];
124124
body.selectAll("div").data(data, String).enter().insert("div");
125125
assert.deepEqual(body.selectAll("div").data(), data);
126126
}

0 commit comments

Comments
 (0)