Как сообщить WordPress, что jQuery уже загружен на странице, чтобы избежать дублирования через wp_enqueue_scripts

8 мая 2012 г., 18:01:40
Просмотры: 269
Голосов: 0

Для уменьшения количества HTTP-запросов я объединяю все скрипты, используемые моей темой, в один минифицированный .js файл каждый раз при сохранении настроек темы.

Один из файлов в этом .js - это библиотека jQuery.

Вместо того чтобы подключать jQuery как отдельный файл (используя wp_enqueue_scripts), я включаю основной файл jQuery WordPress в выходной поток этого главного .js файла.

Проблема в том, что поскольку я не использую wp_enqueue_scripts() для загрузки jQuery, существует вероятность, что он может быть загружен более одного раза на странице через плагин, который не знает, что он уже там есть.

Могу ли я установить флаг, чтобы WordPress знал, что файл уже существует на странице?

0
Все ответы на вопрос 3
5

Темы не должны заниматься минификацией кода. Это задача плагинов. Темы отвечают за представление, а не за функциональность.

Пытаясь добавить минификацию JS в тему, вы фактически мешаете кэширующему плагину выполнять эту функцию и потенциально создаёте проблемы (например, дублирование загрузки библиотеки jQuery).

8 мая 2012 г. 18:06:21
Комментарии

Некоторые темы (включая мою) содержат виджет слайдера, для работы которого требуется jQuery. По вашему мнению, следует ли всегда выносить слайдеры, требующие js, в отдельный плагин?

Scott B Scott B
8 мая 2012 г. 19:13:58

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

Chip Bennett Chip Bennett
8 мая 2012 г. 19:17:15

А, теперь я лучше понимаю вашу точку зрения. Вы не против того, чтобы тема включала jQuery, а против включения его "нестандартным" способом (объединение скриптов шаблона в один минифицированный файл), что должно оставаться задачей плагина, поскольку это функциональность. Я могу принять это в качестве руководящего принципа, но считаю, что должна быть возможность применять лучшие практики веб-дизайна/разработки (минимизация HTTP-запросов, минификация скриптов) без необходимости использовать плагин.

Scott B Scott B
8 мая 2012 г. 19:38:20

В идеале, если бы я мог загрузить все свои скрипты одним вызовом wp_enqueue_scripts и передать параметр, чтобы в результате получился один .js файл, содержащий все файлы, - это то, чего я хочу. Я не против оставить минификацию сторонним оптимизаторам.

Scott B Scott B
8 мая 2012 г. 19:48:02

"должен быть способ соблюдать лучшие практики веб-дизайна/разработки (минимизация HTTP-запросов, минификация скриптов) без необходимости использования плагина" - Что не так с плагинами? И темы, и плагины используют один и тот же API плагинов для одних и тех же целей. В данном случае лучшей практикой является разделение представления и функциональности, поэтому вынесение минификации в плагин - это правильный подход.

Chip Bennett Chip Bennett
8 мая 2012 г. 20:18:01
4

Вам действительно не стоит этого делать, это не лучшая практика. Всегда следует использовать версию jQuery, поставляемую с пакетом WordPress. Если вы используете собственную версию jQuery в своем файле, вам придется вручную обновлять ее каждый раз, когда jQuery обновляется в пакете WordPress.

Если вы все же настаиваете на этом, самое простое и грубое решение, которое приходит мне на ум, — сначала отменить регистрацию оригинального jQuery, а затем зарегистрировать ваш файл (minified.js) как jQuery. Рано или поздно вы обязательно столкнетесь с проблемами несовместимости с плагинами.

8 мая 2012 г. 18:08:21
Комментарии

Я думаю, что автор вопроса на самом деле собирается использовать версию jQuery, входящую в состав ядра, через wp_enqueue_script( 'jquery' ); он просто хочет подключить её особым способом, который позволит теме минифицировать свои скрипты.

Chip Bennett Chip Bennett
8 мая 2012 г. 18:15:56

@ChipBennett Не совсем так, прочитайте третий абзац его вопроса. :)

Mateusz Hajdziony Mateusz Hajdziony
8 мая 2012 г. 18:19:30

Извините, позвольте мне переформулировать. :) Я думаю, что автор вопроса собирается использовать версию jQuery, входящую в состав ядра, но хочет подключить её особым способом. В любом случае, я считаю, что предпосылка ошибочна.

Chip Bennett Chip Bennett
8 мая 2012 г. 18:31:14

@Chip Bennett: Да, всё верно. Я использую версию, входящую в ядро, но вместо того чтобы подключать её как отдельный файл, я объединяю её с другими скриптами, от которых зависит моя тема (slider.js, webfonts.js и т.д.), в один минифицированный .js файл.

Scott B Scott B
8 мая 2012 г. 18:38:29
0

Плагин Dependency Minification отлично справляется с задачей, избавляя меня от необходимости вручную заниматься минификацией и конкатенацией.

27 окт. 2015 г. 14:27:02