Ver Fonte

use Sets instead of objects

Gildas há 7 anos atrás
pai
commit
8d05f63867
1 ficheiros alterados com 12 adições e 12 exclusões
  1. 12 12
      lib/single-file/rules-minifier.js

+ 12 - 12
lib/single-file/rules-minifier.js

@@ -26,11 +26,11 @@ this.rulesMinifier = this.rulesMinifier || (() => {
 
 	return {
 		process: doc => {
-			const rulesCache = {
-				selectors: {},
+			const rulesData = {
+				selectors: new Set(),
 				fonts: {
-					declared: {},
-					used: {}
+					declared: new Set(),
+					used: new Set()
 				}
 			};
 			const stats = {
@@ -41,11 +41,11 @@ this.rulesMinifier = this.rulesMinifier || (() => {
 				if (style.sheet) {
 					const processed = style.sheet.cssRules.length;
 					stats.processed += processed;
-					style.textContent = processRules(doc, style.sheet.cssRules, rulesCache);
+					style.textContent = processRules(doc, style.sheet.cssRules, rulesData);
 					stats.discarded += processed - style.sheet.cssRules.length;
 				}
 			});
-			const unusedFonts = Object.keys(rulesCache.fonts.declared).filter(fontFamily => !Object.keys(rulesCache.fonts.used).includes(fontFamily));
+			const unusedFonts = Array.from(rulesData.fonts.declared).filter(fontFamily => !rulesData.fonts.used.has(fontFamily));
 			doc.querySelectorAll("style").forEach(style => {
 				if (style.sheet) {
 					const processed = style.sheet.cssRules.length;
@@ -57,23 +57,23 @@ this.rulesMinifier = this.rulesMinifier || (() => {
 		}
 	};
 
-	function processRules(doc, rules, cache) {
+	function processRules(doc, rules, rulesData) {
 		let stylesheetContent = "";
 		if (rules) {
 			Array.from(rules).forEach(rule => {
 				if (rule.media) {
 					stylesheetContent += "@media " + Array.prototype.join.call(rule.media, ",") + " {";
-					stylesheetContent += processRules(doc, rule.cssRules, cache);
+					stylesheetContent += processRules(doc, rule.cssRules, rulesData);
 					stylesheetContent += "}";
 				} else if (rule.selectorText) {
 					const selector = getFilteredSelector(rule.selectorText);
 					if (selector) {
 						try {
-							if (cache.selectors[selector] || doc.querySelector(selector)) {
+							if (rulesData.selectors.has(selector) || doc.querySelector(selector)) {
 								stylesheetContent += rule.cssText;
-								cache.selectors[selector] = true;
+								rulesData.selectors.add(selector);
 								if (rule.style.fontFamily) {
-									rule.style.fontFamily.split(",").forEach(fontFamily => cache.fonts.used[fontFamily.trim()] = true);
+									rule.style.fontFamily.split(",").forEach(fontFamily => rulesData.fonts.used.add(fontFamily.trim()));
 								}
 							}
 						} catch (error) {
@@ -82,7 +82,7 @@ this.rulesMinifier = this.rulesMinifier || (() => {
 					}
 				} else {
 					if (rule.type == CSSRule.FONT_FACE_RULE) {
-						cache.fonts.declared[rule.style.fontFamily.trim()] = true;
+						rulesData.fonts.declared.add(rule.style.fontFamily.trim());
 					}
 					stylesheetContent += rule.cssText;
 				}