UNPKG

phantomas

Version:

Headless Chromium-based web performance metrics collector and monitoring tool

78 lines (61 loc) 2.39 kB
(function domHiddenContentScope(phantomas) { phantomas.spyEnabled(false, "initializing hidden content analysis"); window.addEventListener("load", () => { var runner = new phantomas.nodeRunner(), lazyLoadableImages = {}; phantomas.spyEnabled(false, "analyzing hidden content"); runner.walk(document.body, (node) => { switch (node.nodeType) { case Node.ELEMENT_NODE: // @see https://developer.mozilla.org/en/DOM%3awindow.getComputedStyle var styles = window.getComputedStyle(node); if (styles && styles.getPropertyValue("display") === "none") { if (typeof node.innerHTML === "string") { var size = node.innerHTML.length; phantomas.incrMetric("hiddenContentSize", size); // log hidden containers bigger than 1 kB if (size > 1024) { phantomas.addOffender( "hiddenContentSize", phantomas.getDOMPath(node) + " (" + size + " characters)" ); } } // count hidden images that can be lazy loaded (issue #524) var images = []; if (node.tagName === "IMG") { images = [node]; } else if (typeof node.querySelectorAll === "function") { images = node.querySelectorAll("img") || []; } for (var i = 0, len = images.length; i < len; i++) { var src = images[i].src, path; if (src === "" || src.indexOf("data:image") === 0) continue; if (!lazyLoadableImages[src]) { path = phantomas.getDOMPath(images[i]); lazyLoadableImages[src] = { path: path, }; } } // don't run for child nodes as they're hidden as well return false; } break; } }); Object.keys(lazyLoadableImages).forEach((img) => { var entry = lazyLoadableImages[img]; phantomas.incrMetric("hiddenImages"); phantomas.addOffender("hiddenImages", img); phantomas.log( "hiddenImages: <%s> image (%s) is hidden and can be lazy-loaded", img, entry.path ); }); phantomas.spyEnabled(true); }); phantomas.spyEnabled(true); })(window.__phantomas);