Bug 1356282 - Change Sync's Utils.arraySub to be O(n) using Set. r?tcsc draft
authortiago <tiago.paez11@gmail.com>
Fri, 05 May 2017 03:16:30 -0300
changeset 573009 38433f1f857cbbb5cc3ddf61f32811e85f9212bc
parent 572730 0b255199db9d6a6f189b89b7906f99155bde3726
child 575952 fb00add340dde045cf7b2005b71ad59d1612dded
push id57267
push userbmo:tiago.paez11@gmail.com
push dateFri, 05 May 2017 06:18:57 +0000
reviewerstcsc
bugs1356282
milestone55.0a1
Bug 1356282 - Change Sync's Utils.arraySub to be O(n) using Set. r?tcsc Sync's Utils.arrayUnion and Utils.arraySub are O(n^2) because Utils.arraySub uses indexOf inside a loop. This patch makes Utils.arraySub use a Set, and by doing so, Utils.arrayUnion and Utils.arraySub become O(n). MozReview-Commit-ID: DDqjRWalfP9
services/sync/modules/util.js
--- a/services/sync/modules/util.js
+++ b/services/sync/modules/util.js
@@ -547,17 +547,18 @@ this.Utils = {
 
   /**
    * Create an array like the first but without elements of the second. Reuse
    * arrays if possible.
    */
   arraySub: function arraySub(minuend, subtrahend) {
     if (!minuend.length || !subtrahend.length)
       return minuend;
-    return minuend.filter(i => subtrahend.indexOf(i) == -1);
+    let setSubtrahend = new Set(subtrahend);
+    return minuend.filter(i => !setSubtrahend.has(i));
   },
 
   /**
    * Build the union of two arrays. Reuse arrays if possible.
    */
   arrayUnion: function arrayUnion(foo, bar) {
     if (!foo.length)
       return bar;