WordPress: переместить встроенный JS для запуска после отложенного jQuery

Пытаясь следовать рекомендациям Google Page Insights, у меня есть рекомендация "Блок визуализации JS", и она связана с jQuery основной файл.

Мой сайт использует WordPress с некоторыми плагинами. Один из плагинов вставляет свой JS. Поэтому, когда я двигаюсь jQuery загрузить в нижний колонтитул, или когда я использую режим "отложенного" для загрузки, я получаю jQuery is not defined как только встроенный код сработал.

Я пытался найти глобальное решение, чтобы "перехватить" все встроенные скрипты и отложить его после jQuery Основной файл выполняется в конце документа.

Я написал решение, которое отлично работает для меня. Это очень простое решение для моей конкретной ситуации, но я не смог сделать это в качестве фильтра для the_content или вывод виджета. Я хотел бы сделать это глобальным решением, так что мне не нужно было бы беспокоиться о каком-либо JS-запуске.

Есть идеи, как заставить это работать? Вот мой код для этого конкретного случая, который проходит через короткий код:

/* Get shortcode HTML */ 
$widget_shortcode = do_shortcode($shortcode);

/* Take out all scripts into an array */
$delayed_scripts = array();
preg_match_all('#<script(.*?)</script>#is', $widget_shortcode, $match);
foreach ($match as $val){
    $delayed_script = '<script '.$val[0].'</script>';
    array_push($delayed_scripts, $delayed_script);
}

/* Remove all scripts from HTML */
$widget_shortcode = preg_replace('#<script(.*?)</script>#is', '', $widget_shortcode);

/* Echo filtered HTML */
echo $widget_shortcode;

И как раз перед закрытием </body> тег:

foreach ($delayed_scripts as $script) {
    echo $delayed_script;
}

1 ответ

Я очень много работал над этой же проблемой. Здесь есть несколько вещей, которые следует учитывать. Эта проблема была бы легкой, если бы каждый плагин ставил в очередь скрипты в Wordpress должным образом, к сожалению, многие этого не делают, а вместо этого просто выводят скрипт или используют стандартное включение.

Как отметили некоторые комментаторы, если вы хотите перехватить все встроенные скрипты, у вас нет выбора, кроме как искать в выходном буфере теги скрипта, потому что, если плагин отображает скрипт, вы ничего не можете сделать в WordPress после этого, так как он отправляется в буфер.,

Имейте в виду, что использование операторов preg и поиск во всей html-документации, а затем манипулирование строками, вероятно, намного дороже, чем загрузка jQuery в голову. Это увеличит время отклика сервера для HTML-документа, и это время ожидания так же плохо, потому что это также время, когда не происходит рендеринг, и пользователь сидит там с пустым экраном. Не говоря уже о том, что перемещение jQuery в нижний колонтитул означает, что все, что от него зависит, не будет работать, пока нижний колонтитул не будет проанализирован. По этой же причине Google рекомендует помещать аналитический код в голову. Что если пользователь уходит раньше, чем у кода аналитики была возможность проанализировать?

Скорость страницы Google - это руководство, а не правило. Не стучите головой о стену, пытаясь получить идеальный результат.

Другие вопросы по тегам