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 - это руководство, а не правило. Не стучите головой о стену, пытаясь получить идеальный результат.