Вредит ли производительность многократному вызову `setInterval ()`, если внутренняя функция ничего не делает? - PullRequest
0 голосов
/ 28 февраля 2020

У меня на сайте есть сторонний плагин JavaScript, который генерирует отчеты с таблицами HTML, но он применяет свой собственный стиль, который уродливо и громоздко изменять (каждый элемент таблицы имеет массу классов, которые установить целую кучу свойств, которые мне нужно переопределить, et c.). Через плагин нет возможности изменить это.

Мой сайт построен на Bootstrap 4, поэтому я нашел то, что я мог сделать, это выбрать эти сгенерированные таблицы с помощью jQuery, а затем просто удалить все их пользовательские классы и замените их стандартными Bootstrap табличными классами. Теперь они выглядят и работают точно так же, как и все другие таблицы на моем сайте.

Проблема в том, что плагин не отображает какие-либо события или что-либо, что я могу подключить, чтобы узнать, когда таблица была сгенерирована. Так что я прибег к простому запуску функции на интервале, который ищет таблицы с этими конкретными пользовательскими классами; если он находит что-то, то он удаляет их и меняет классы Bootstrap:

$(function () {
    var checkForTables = setInterval(styleTables, 500);

    function styleTables() {
        $("table.tableWithWeirdStyling").each(function () {
            $(this).attr("class", "table table-bordered table-striped");
        });
    }
});

Но я не могу не чувствовать, что это плохо для производительности, потому что эта функция срабатывает каждый 500ms на неопределенный срок, независимо от того, присутствует ли какая-либо из этих таблиц на конкретной странице или нет (и я не могу очистить интервал, как только он найдет таблицы и применит стилизацию, потому что у пользователя всегда есть возможность восстановить их, поэтому я приходится постоянно проверять).

Мой вопрос: если большинство страниц на моем сайте даже не имеют ни одной из этих таблиц, действительно ли это плохо для производительности, если функция не даже делать что-нибудь? Если так, есть ли другой способ, которым я мог бы достичь этого?

...