Explorar o código

added cache to make processRules faster

Gildas %!s(int64=7) %!d(string=hai) anos
pai
achega
f87994b55c
Modificáronse 1 ficheiros con 4 adicións e 3 borrados
  1. 4 3
      lib/single-file/single-file-core.js

+ 4 - 3
lib/single-file/single-file-core.js

@@ -688,19 +688,20 @@ this.SingleFileCore = (() => {
 			}));
 		}
 
-		static processRules(doc, rules, cssRules) {
+		static processRules(doc, rules, cssRules, cache = {}) {
 			if (rules) {
 				Array.from(rules).forEach(rule => {
 					if (rule.media) {
 						cssRules.push("@media " + Array.prototype.join.call(rule.media, ",") + " {");
-						DomProcessorHelper.processRules(doc, rule.cssRules, cssRules);
+						DomProcessorHelper.processRules(doc, rule.cssRules, cssRules, cache);
 						cssRules.push("}");
 					} else if (rule.selectorText) {
 						const selector = DomUtil.getFilteredSelector(rule.selectorText);
 						if (selector) {
 							try {
-								if (doc.querySelector(selector)) {
+								if (cache[selector] || doc.querySelector(selector)) {
 									cssRules.push(rule.cssText);
+									cache[selector] = true;
 								}
 							} catch (error) {
 								cssRules.push(rule.cssText);