Что такое отложенная загрузка скриптов и зачем её отключать
Отложенная загрузка (defer, async, lazy load) — это техника оптимизации загрузки страницы, при которой скрипты или ресурсы загружаются позже, после основного контента или в момент, когда они действительно нужны. В WordPress многие плагины и темы используют эту технологию, чтобы ускорить время загрузки и улучшить показатели Core Web Vitals.
Однако не всегда отложенная загрузка работает корректно. Иногда она приводит к ошибкам в работе JavaScript, конфликтам плагинов или нарушению логики сайта. В таких случаях необходимо либо отключить отложенную загрузку конкретных скриптов, либо полностью убрать её для определённых ресурсов.
В этой статье разберём, как технически удалить или отключить отложенную загрузку скриптов в WordPress, не нарушая остальной функционал.
Типы отложенной загрузки скриптов в WordPress и как их выявить
Атрибуты defer и async
Самый простой способ отложить загрузку скриптов — добавить к тегу <script> атрибуты defer или async. Например:
<script src="example.js" defer></script>WordPress позволяет добавлять эти атрибуты через фильтры script_loader_tag. Чтобы найти, какие скрипты загружаются с этими атрибутами, можно просмотреть исходный код страницы или использовать инструменты разработчика в браузере.
Lazy Load для изображений и iframe
Отложенная загрузка часто применяется к изображениям и iframe с помощью атрибута loading="lazy". Его также можно удалить программно при необходимости.
Плагины, которые реализуют отложенную загрузку
Популярные плагины для оптимизации, например, Clearfy Pro, Autoptimize, WP Rocket, часто внедряют отложенную загрузку. В таких случаях стоит проверить настройки плагина. Но если нужно убрать отложенную загрузку вручную, это возможно через код.
Как удалить отложенную загрузку скриптов через functions.php
Чтобы убрать атрибуты defer и async, добавленные через фильтр script_loader_tag, можно использовать следующий код:
function wppuzzle_remove_defer_async( $tag, $handle, $src ) {
// Список скриптов, у которых нужно убрать defer или async
$scripts_to_clean = array('example-script-handle', 'another-script');
if ( in_array( $handle, $scripts_to_clean ) ) {
// Удаляем атрибуты defer и async из тега
$tag = str_replace( array(' defer', ' async'), '', $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'wppuzzle_remove_defer_async', 10, 3 );В этом примере замените example-script-handle на идентификаторы скриптов, которые хотите исправить. Чтобы узнать handle, посмотрите в код темы или используйте плагин Query Monitor.
Удаление lazy load у изображений и iframe
WordPress с версии 5.5 внедрил поддержку отложенной загрузки изображений и iframe по умолчанию. Если нужно убрать это поведение для всех изображений, добавьте в functions.php:
add_filter( 'wp_lazy_loading_enabled', '__return_false' );Если хотите отключить lazy load только для определённых изображений, можно использовать фильтр с проверкой:
function wppuzzle_disable_lazy_for_specific_images( $default, $image, $context ) {
// Например, отключаем lazy load для изображений с классом no-lazy
if ( strpos( $image->get_attribute('class'), 'no-lazy' ) !== false ) {
return false;
}
return $default;
}
add_filter( 'wp_lazy_loading_enabled', 'wppuzzle_disable_lazy_for_specific_images', 10, 3 );Отключение отложенной загрузки в популярных плагинах (пример Clearfy Pro)
В Clearfy Pro и подобных плагинах отложенная загрузка часто включается в настройках. Чтобы полностью убрать её для скриптов:
- Перейдите в настройки плагина Clearfy Pro.
- Отключите опцию «Отложенная загрузка JavaScript» или «Defer JS».
- Сохраните изменения и проверьте работу сайта.
Если отключить через настройки нельзя, то можно попробовать добавить фильтры или исключения в functions.php, как описано выше.
Пример полного решения — отключение defer для скриптов jQuery и lazy load для изображений
Иногда jQuery может конфликтовать с отложенной загрузкой. Чтобы убрать defer для jQuery и отключить lazy load у всех изображений, используйте:
function wppuzzle_fix_jquery_defer( $tag, $handle, $src ) {
if ( 'jquery-core' === $handle || 'jquery' === $handle ) {
$tag = str_replace( array(' defer', ' async'), '', $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'wppuzzle_fix_jquery_defer', 10, 3 );
add_filter( 'wp_lazy_loading_enabled', '__return_false' );Этот код поможет избежать типичных проблем с jQuery и изображениями при отложенной загрузке.
Советы по отладке и проверке результата
После внесения изменений рекомендую:
- Очистить кэш сайта и браузера.
- Проверить исходный код страницы — в тегах
<script>не должно быть атрибутов defer/async там, где вы их отключили. - Использовать инструменты разработчика браузера для просмотра загрузки скриптов.
- Проверить работоспособность функционала, связанного с этими скриптами.
Для анализа можно использовать плагин Query Monitor, чтобы увидеть, какие скрипты загружаются и с какими атрибутами.
Выводы
Отложенная загрузка — мощный инструмент ускорения WordPress сайтов, но иногда она мешает корректной работе. Знание, как отключить или удалить отложенную загрузку для конкретных скриптов и ресурсов, помогает быстро устранять конфликты и ошибки без ущерба для производительности.
Используйте приведённые примеры кода и рекомендации, чтобы гибко управлять поведением загрузки скриптов на вашем сайте.
Подробнее о плагинах для оптимизации и управлении скриптами можно узнать на WPSHOP.ru.