Speeds up advanced processing by shortening optimize loop.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Thu, 9 Oct 2014 06:15:07 +0000 (07:15 +0100)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Fri, 10 Oct 2014 20:22:46 +0000 (21:22 +0100)
* As it seems we only need 2 extra passes from #removeDuplicates and #mergeAdjacent.

History.md
lib/selectors/optimizers/advanced.js

index 9d15be2..4db9ba7 100644 (file)
@@ -3,6 +3,7 @@
 
 * Allows `target` option to be a path to a folder instead of a file.
 * Breaks 2.x compatibility for using CleanCSS as a function.
+* Speeds up advanced processing by shortening optimize loop.
 * Fixed issue [#360](https://github.com/GoalSmashers/clean-css/issues/360) - adds 7 extra CSS colors.
 
 [2.2.16 / 2014-09-16](https://github.com/jakubpawlowicz/clean-css/compare/v2.2.15...v2.2.16)
index 68a9882..2f37a40 100644 (file)
@@ -235,12 +235,6 @@ AdvancedOptimizer.prototype.reduceSelector = function (tokens, selector, data, o
   }
 };
 
-AdvancedOptimizer.prototype.noChanges = function () {
-  return this.minificationsMade.length > 4 &&
-    this.minificationsMade[0] === false &&
-    this.minificationsMade[1] === false;
-};
-
 function optimizeProperties(tokens, propertyOptimizer) {
   for (var i = 0, l = tokens.length; i < l; i++) {
     var token = tokens[i];
@@ -264,21 +258,12 @@ AdvancedOptimizer.prototype.optimize = function (tokens) {
 
     optimizeProperties(tokens, self.propertyOptimizer);
 
-    // Run until 2 last operations do not yield any changes
-    self.minificationsMade = [];
-    while (true) {
-      if (self.noChanges())
-        break;
-      self.removeDuplicates(tokens);
+    self.removeDuplicates(tokens);
+    self.mergeAdjacent(tokens);
+    self.reduceNonAdjacent(tokens);
 
-      if (self.noChanges())
-        break;
-      self.mergeAdjacent(tokens);
-
-      if (self.noChanges())
-        break;
-      self.reduceNonAdjacent(tokens);
-    }
+    self.removeDuplicates(tokens);
+    self.mergeAdjacent(tokens);
   }
 
   _optimize(tokens);