每秒扫描页面查找关键字是否有效?

Is it efficient to scan the page for a keyword every second?

所以我正在为自己和几个朋友开发个人用户脚本。用户脚本用于阻止页面上的关键字。

在我使用的页面上搜索关键字:

var filter = ["worda", "wordb", "wordc"];
var found = false;

var check =
    function () {
        //Stores the content of the head and body in the document.
        var head = $("head").html();
        var body = $("body").html();


        $.each(filter, function(index, item) {
            if ((head + body).toString().toLowerCase().contains(item.toLowerCase()))  {
                window.clearInterval(interval);
                console.log("Found: " + item);
                found = true;
                return false;
            }
        });

        if (found) {
            $("body").hide();
            var originalTitle = $(document).prop("title");
            $(document).prop("title", "Blocked");

            window.setTimeout(function() {
                if (confirm("This page contains a blocked keyword, are you sure you'd like to continue?")) {
                    $(document).prop("title", originalTitle);
                    $("body").show();
                    return;
                }
            }, 1);
        }
    };

然后我将它设置为每秒重复通过:

var interval = window.setInterval(check, 1000);

我每秒重新检查页面的原因是因为新内容可能是通过 Javascript 动态创建的,我需要确保它也被过滤了。

但是,我想知道这是否是扫描页面关键字的最有效方法,或者是否有更有效的方法不需要我重新检查整个页面(可能只需要重新检查新元素)。

另外,我想尽可能降低间隔(我想大约 100 毫秒),但是我不知道这是否会非常节省资源。

感谢您的帮助。

您说得对,定期扫描页面内容是解决问题的低效方法。话虽这么说,如果它只是 运行 每秒一次,那可能没什么大不了的。

不过,还有更好的选择。 MutationObserver 接口可用于在修改文档或文档的一部分时触发事件。这非常适合您要执行的操作:

var observer = new MutationObserver(function() {
    … scan the document for your keywords …
});
observer.observe(document, {
    childList: true,
    characterData: true,
    subtree: true
});