Browse Source

remove unused fonts sooner

Gildas 7 years ago
parent
commit
5d6aac86ea

+ 32 - 13
lib/single-file/css-fonts-minifier.js

@@ -56,7 +56,7 @@ this.fontsMinifier = this.fontsMinifier || (() => {
 	};
 
 	return {
-		process: (doc, secondPass) => {
+		removeUnusedFonts: doc => {
 			const declaredFonts = new Set();
 			const fontsDetails = new Map();
 			const usedFonts = [];
@@ -70,22 +70,12 @@ this.fontsMinifier = this.fontsMinifier || (() => {
 					discarded: 0
 				}
 			};
-			let pseudoElementsContent;
-			if (secondPass) {
-				pseudoElementsContent = "";
-			} else {
-				pseudoElementsContent = Array.from(doc.querySelectorAll("style")).map(style => getPseudoElementsContent(doc, style.sheet.cssRules)).join("");
-			}
+			let pseudoElementsContent = Array.from(doc.querySelectorAll("style")).map(style => getPseudoElementsContent(doc, style.sheet.cssRules)).join("");
 			doc.querySelectorAll("style").forEach(style => {
 				if (style.sheet) {
 					stats.rules.processed += style.sheet.cssRules.length;
 					stats.rules.discarded += style.sheet.cssRules.length;
-					processRules(doc, style.sheet.cssRules, fontsDetails, declaredFonts, usedFonts, pseudoElementsContent, secondPass);
-				}
-			});
-			doc.querySelectorAll("style").forEach(style => {
-				if (style.sheet) {
-					style.textContent = processFontFaceRules(style.sheet.cssRules, fontsDetails, "all", stats);
+					processRules(doc, style.sheet.cssRules, fontsDetails, declaredFonts, usedFonts, pseudoElementsContent, false);
 				}
 			});
 			doc.querySelectorAll("[style]").forEach(element => {
@@ -116,6 +106,35 @@ this.fontsMinifier = this.fontsMinifier || (() => {
 				}
 			});
 			return stats;
+		},
+		removeAlternativeFonts: doc => {
+			const declaredFonts = new Set();
+			const fontsDetails = new Map();
+			const usedFonts = [];
+			const stats = {
+				rules: {
+					processed: 0,
+					discarded: 0
+				},
+				fonts: {
+					processed: 0,
+					discarded: 0
+				}
+			};
+			let pseudoElementsContent = "";
+			doc.querySelectorAll("style").forEach(style => {
+				if (style.sheet) {
+					stats.rules.processed += style.sheet.cssRules.length;
+					stats.rules.discarded += style.sheet.cssRules.length;
+					processRules(doc, style.sheet.cssRules, fontsDetails, declaredFonts, usedFonts, pseudoElementsContent, true);
+				}
+			});
+			doc.querySelectorAll("style").forEach(style => {
+				if (style.sheet) {
+					style.textContent = processFontFaceRules(style.sheet.cssRules, fontsDetails, "all", stats);
+				}
+			});
+			return stats;
 		}
 	};
 

+ 6 - 2
lib/single-file/single-file-browser.js

@@ -210,8 +210,12 @@ this.SingleFile = this.SingleFile || (() => {
 			return cssMinifier.process(doc, mediaAllInfo);
 		}
 
-		static minifyFonts(doc, secondPass) {
-			return fontsMinifier.process(doc, secondPass);
+		static removeUnusedFonts(doc) {
+			return fontsMinifier.removeUnusedFonts(doc);
+		}
+
+		static removeAlternativeFonts(doc, secondPass) {
+			return fontsMinifier.removeAlternativeFonts(doc, secondPass);
 		}
 
 		static getMediaAllInfo(doc) {

+ 6 - 5
lib/single-file/single-file-core.js

@@ -103,6 +103,7 @@ this.SingleFileCore = this.SingleFileCore || (() => {
 		]
 	}, {
 		sequential: [
+			{ option: "removeAlternativeFonts", action: "removeUnusedFonts" },
 			{ option: "removeUnusedStyles", action: "removeUnusedStyles" },
 			{ option: "removeAlternativeMedias", action: "removeAlternativeMedias" }
 		],
@@ -536,18 +537,18 @@ this.SingleFileCore = this.SingleFileCore || (() => {
 			this.stats.set("discarded", "CSS rules", stats.discarded);
 		}
 
+		removeUnusedFonts() {
+			DOM.removeUnusedFonts(this.doc);
+		}
+
 		removeAlternativeFonts() {
-			DOM.minifyFonts(this.doc);
+			DOM.removeAlternativeFonts(this.doc);
 		}
 
 		removeAlternativeImages() {
 			DOM.removeAlternativeImages(this.doc, this.options);
 		}
 
-		postRemoveAlternativeFonts() {
-			DOM.minifyFonts(this.doc, true);
-		}
-
 		removeHiddenElements() {
 			const hiddenElements = this.doc.querySelectorAll("[" + DOM.removedContentAttributeName(this.options.sessionId) + "]");
 			this.stats.set("discarded", "hidden elements", hiddenElements.length);