Существует много факторов, которые влияют на производительность вашего WordPress сайта и одна из хитростей, которую часто будут советовать вам "эксперты" — избегать плагинов. Они будут говорить вам, что лучше поместить функциональность внутрь вашей темы вместо того, чтобы активировать плагин.

Правда ли это?

Вступление

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

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

Если вы быстро поищете в Google "как добавить форму контактов в WordPress", вы скорее всего заметите некий тренд в заголовках статей. Большинство руководств будут включать что-то вроде "…без использования плагинов". Этот тренд, характерный для десятков названий руководств, приводит к мысли, что плагины — это плохо, и что они, пожалуй, влияют на производительность сайта. Наличие слов "без плагинов" так характерно для заголовков статей а также постов на форумах, что многие начали верить, что лучше, в частности, для производительности, включать часть функциональности внутрь тем (своя она или купленная) чем надеяться на плагин.

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

Распространенные убеждения

1. Лучше размещать функциональность в теме, чем в плагине

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

Нет, и вот почему:

"От того, загружается код в точке Б или в точке А, он не становится более эффективным!"

Во-первых, единственная разница между кодом, размещенным в теме, и кодом в плагине — это момент его исполнения. Активные плагины загружаются и выполняются перед текущей в данный момент темой. Но кроме этого разницы между тем, как исполняется код, — нет. Также нет никакой разницы в эффективности кода. Если вам нужна диаграмма процесса загрузки ядра WordPress — посмотрите эту запись.

Во-вторых, после утверждения номер 1, мы должны спросить "Почему тема — лучшее место для исполнения кода, если и код плагина и код темы выполняются одинаково?". Ответ прост. При том, что у темы нет никаких преимуществ перед плагином в плане размещения функциональности, оказывается, что у плагина есть несколько существенных преимуществ над темами. Я расскажу о них через несколько мгновений.

2. Код в темах выполняется лучше, чем в плагинах

Я действительно не знаю, откуда это взялось, хотя я подозреваю, что это связанно с фактом, что люди часто боятся плагинов, и они часто слышат, что плагины вызывают проблемы с производительностью сайта. Факт в том, что это убеждение как минимум нелепо. Как говорилось выше, нет никакой разницы (кроме момента во времени) в том, как выполняется код из плагина в сравнении с кодом темы.

Если вы поместите функцию в плагин, выполните ее, засечете время, и затем сделаете то же самое с функцией, но размещенной в теме, — вы увидите, что нет никакой разницы. Обе выполнятся с одинаковой скоростью без любых преимуществ друг перед другом в плане производительности.

Это поднимает вопрос: являются ли темы лучшими чем плагины для исполнения кода? Короткий ответ: нет, абсолютно не являются.

Причины, по которым плагины лучше

Теперь мы должны спросить, являются ли плагины лучшим местом для вызова функций и кода, чем темы? Короткий ответ: да, в большинстве случаев. Почему? Для этого есть несколько причин:

  1. Разделение вашего кода на "порции" — одна из лучших вещей, которые вы можете сделать с большими проектами, поскольку это делает весь проект гораздо более простым в поддержке и отладке в случае проблемы. Помещая отдельные части функциональности в отдельные плагины, вы создаете эти "порции". Каждый плагин поддерживается отдельно, что (как вы обнаружите), может сильно упростить отслеживание проблемы.

  2. Если что-то ломается, вы просто отключаете плагин. Допустим, контактная форма на вашем сайте интегрирована в вашу тему и она ломается, унося за собой сайт. Что вы сделаете? Если у вас нет навыков или знаний, как заменить контактную форму на рабочую, у вас могут быть большие проблемы. С другой стороны, если функциональность предоставляется плагином, вы просто выключаете плагин и снова активируете его когда проблема решена, или идете искать новый плагин.

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

  2. Плагины могут быть обновлены и улучшены отдельно. Если вы добавите улучшения в тему, обновлять нужно будет всю тему. Как часто вы видели пользователя темы, добавляющего настройки в style.css или functions.php? Если они делают это, то для них невозможно обновить тему и получить улучшения без ручного переноса всех их изменений. Это если предположить, что они не создали тему-потомка, которую они должны были создать, но многие этого не делают. Когда улучшения помещены в плагин, пользователю не нужно ничего делать, кроме как обновить плагин из своей Консоли.

Причин больше, чем четыре, но уже сейчас должны быть понятны преимущества плагинов над темами для отдельных частей исполняемого кода.

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

Что будет, когда у вас будет 10 плагинов? Не много ли это? Как насчет 20 или 30? Не слишком ли это?

Нет.

На WordCamp Kansas City 2012 у меня была возможность провести некоторое время в беседе с Отто, одним из топ разработчиков для WordPress. Отто разрабатывает персональный сайт Мэтта Мулленвега, и он рассказал, что на этом сайте десятки небольших плагинов. У каждого из плагинов свои задачи и они все работают бок о бок, несмотря на большое их количество.

На моем сайте больше 50 плагинов.

Дело в том, что плагины не вызывают проблем с производительностью только потому, что они плагины, будет их 100 или даже 200 одновременно активных.

Проблемы с производительностью при использовании плагинов возникают из-за плохо написанного кода внутри, а не количества плагинов в общем.

У вас может быть больше проблем с производительностью из-за одного плохо написанного плагина, чем из-за 300 простых, хорошо написанных плагинов.

Проблемы с производительностью обычно сводятся к загрузке ресурсов и выполнению запросов к базе данных, так что плагины, которые это выполняют, могут влиять на производительность. Плагины, которые не делают запросов к базе и не загружают ресурсы, имеют нулевое (или близкое к нулю) влияние на производительность, потому вы можете запустить 300 плагинов на вашем сайте без особых проблем.

Ключевой момент, который нужно запомнить:

Количество плагинов не влияет на производительность.
На производительность влияет только качество и тип плагина.

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

Последнее, что нужно помнить, это что плагины — зло, только если они плохо сделаны. Сами по себе плагины не плохие. Они плохие, только если код, из которого они сделаны, — плохой.

Читайте также:

Какие WordPress плагины замедляют работу вашего сайта?

Источник: WP.tutsplus.com

Вам понравился материал?

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

16 комментариев

сначала новые
по рейтингу сначала новые по хронологии

Добрый вечер!
Делал шаблон сайта (http://style-s.tk/) в Artisteer 4.1 . Потом заметил что в браузерах ie7 и ie8 (рисунок header не отображается) , ie10 некоректно отображается. Для ie10 нашел код для совместимости - вставил в header и более-менее отображается (правда при переходе со страницы на страницу немного дергается header), но для ie7 и ie8 не нашел решения. Подскажите пожалуйста!

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

Полностью согласен с авторами статьи. Но по сути правильным будет также утверждение, что чем меньше (сторонних) плагинов будет на сайте, тем лучше. Потому-что любой установленый плагин может добавить нагрузки на сайт. Только если проверять каждый плагин и разрабатывать свои, в случае если другие аналогичные плагины нагружают сайт, что не каждый Wordpress-блоггер сможет сделать.

Замечательная статья, спасибо. Мало что понимаю в коде, но всегда подозревал что как то так и есть.

Бывают конечно кривые плагины или неудачные их обновления. Но в целом, у меня стоит около 40 плагинов. Пробовал отключать большую часть - ни на что не повлияло (кроме удобства конечно). Ставьте все то, что считаете нужным и не заморачивайтесь.

Все вроде логично... при 100-300 уников, да еще при включенном nignx на сервере можно чудить с кучей плагинов...
А вот от 1500-2000 не скажите...

как определить какой плагин создает избыточную нагрузку на систему?

А вы не пробовали перейти по ссылке, указанной в самом конце записи в блоке Читайте также?

WordPress Meetup в Москве #8
7 уроков, выученных за 7 лет использования WordPress
9 распространенных мифов о WordPress

что именно?

Какие WordPress плагины замедляют работу вашего сайта?
http://wordpresso.org/plugins/kakie-wordpress-plaginyi-zamedlyayut-rabotu-vashego-sayta/

спасибо

Так и не дочитал пост до конца, очень длинный) По сути плагин - это просто код, вынесенный в отдельные файлы для удобства. То, как вы добавляете код, с помощью плагинов или непосредственно в тему, не может влиять на производительность сайтов, это же логично!)

Именно это мы и хотели донести до читателя!

Cпасибо Вам большое за такую полезную статью. У меня на сайте стоит 33 плагина и я очень волновалась за производительность сайта, читая на разных сайтах рекомндации о том, что чем меньше плагинов - тем лучше. Собиралась, повозможности, заменить плагины на вставку кодов в файлы. Теперь я успокоилась - своей статьей вы мне сохранили много рабочего времени.

В Wordpress все подчиняется двум правилам работы с кодом (неважно будь то плагин или тема)
1. do_action - предпочтительнее использовать чем add_filter
2. add_filter

Маленький момент, плагинам дано больше возможностей для взаимодействия с ядром, в отличие тем. Вы не сможете использовать session в WordPrss без установки плагина.

Есть еще пару приемов, один из них используется в jigoshop
if (!function_exists('jigoshop_show_product_sale_flash')) в данном случае можно определить свою функцию и стандартная функция будет игнорироваться или наоборот, если ваша функция не определена, будет использоваться стандартная.

Спасибо! Очень дельный комментарий, хорошее дополнение к статье!