From 8e199cd975363536c9cafb00b837011dc9587922 Mon Sep 17 00:00:00 2001 From: Paul Irish Date: Mon, 19 Mar 2018 10:09:53 -0700 Subject: [PATCH] delay DOM node walking via requestIdleCallback --- inject.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/inject.js b/inject.js index 41f9eb5..816f55d 100644 --- a/inject.js +++ b/inject.js @@ -285,18 +285,29 @@ chrome.runtime.sendMessage({}, function(response) { } } } + + // Process the DOM nodes lazily + function enqueueCheckNodes(node, parent, added) { + const checkNodes = _ => checkForVideo(node, parent, added); + if ('requestIdleCallback' in window) { + requestIdleCallback(checkNodes, {timeout: 1000}); + } else { + checkNodes(); + } + } + var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { forEach.call(mutation.addedNodes, function(node) { if (typeof node === "function") return; - checkForVideo(node, node.parentNode || mutation.target, true); - }) + enqueueCheckNodes(node, node.parentNode || mutation.target, true); + }); forEach.call(mutation.removedNodes, function(node) { if (typeof node === "function") return; - checkForVideo(node, node.parentNode || mutation.target, false); - }) + enqueueCheckNodes(node, node.parentNode || mutation.target, false); + }); }); }); observer.observe(document, { childList: true, subtree: true });