Speeds up unit minification by caching regexp.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Sun, 5 Oct 2014 14:16:50 +0000 (15:16 +0100)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Fri, 10 Oct 2014 20:22:45 +0000 (21:22 +0100)
lib/selectors/optimizers/simple.js

index 2ce8211..cf0f2a3 100644 (file)
@@ -13,6 +13,11 @@ var CHARSET_REGEXP = new RegExp('^' + CHARSET_TOKEN, 'i');
 function SimpleOptimizer(options, context) {
   this.options = options;
   this.propertyOptimizer = new PropertyOptimizer(this.options.compatibility, this.options.aggressiveMerging, context);
+
+  var units = ['px', 'em', 'ex', 'cm', 'mm', 'in', 'pt', 'pc', '%'];
+  if (['ie7', 'ie8'].indexOf(options.compatibility) == -1)
+    units.push('rem');
+  options.unitsRegexp = new RegExp('(^|\\s|\\(|,)0(?:' + units.join('|') + ')', 'g');
 }
 
 function removeUnsupported(token, compatibility) {
@@ -104,12 +109,8 @@ function precisionMinifier(_, value, precision) {
     .replace(/(\d)\.($|\D)/g, '$1$2');
 }
 
-function unitMinifier(_, value, compatibility) {
-  var units = ['px', 'em', 'ex', 'cm', 'mm', 'in', 'pt', 'pc', '%'];
-  if (['ie7', 'ie8'].indexOf(compatibility) == -1)
-    units.push('rem');
-
-  return value.replace(new RegExp('(^|\\s|\\(|,)0(?:' + units.join('|') + ')', 'g'), '$1' + '0');
+function unitMinifier(_, value, unitsRegexp) {
+  return value.replace(unitsRegexp, '$1' + '0');
 }
 
 function multipleZerosMinifier(property, value) {
@@ -184,7 +185,7 @@ function reduce(body, options) {
 
     value = zeroMinifier(property, value);
     value = precisionMinifier(property, value, options.roundingPrecision);
-    value = unitMinifier(property, value, options.compatibility);
+    value = unitMinifier(property, value, options.unitsRegexp);
     value = multipleZerosMinifier(property, value);
     value = colorMininifier(property, value, options.compatibility);