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

jquery wordpress pagespeed wordpress-hook

590 просмотра

1 ответ

1074 Репутация автора

Пытаясь следовать предложениям 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;
}
Автор: Shir Gans Источник Размещён: 19.07.2016 02:18

Ответы (1)


-1 плюса

123 Репутация автора

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

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

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

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

Автор: gunnerman Размещён: 21.10.2016 06:27
Вопросы из категории :
32x32