Шаги по оптимизации WordPress в отношении нагрузки на сервер?

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

77 голосов | спросил Paul Sheldrake 12 PM00000020000001831 2010, 14:24:18

14 ответов


30

Вы можете установить WordPress на Nginx. Существует ряд ресурсов, которые помогут:

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

  

Итак, я решил поставить прокси вперёд   от wordpress до статического кеша   насколько это возможно. ВСЕ НЕАУДИРОВАННЫЕ   трафик подается непосредственно из   кеш-файл nginx, принимая некоторые запросы   (например, генерация RSS-каналов) с 6   страниц /секунд до 7000 + страниц в секунду.   Уф. Nginx также обрабатывает протоколирование и   gzipping, оставляя более тяжелый бэкэнд   апачи делать то, что они делают лучше всего: служить   динамические страницы Wordpress только тогда, когда   необходимо.

     

...

     

На nginx - это настолько эффективный itâ € ™ s   страшно. Я никогда не видел, чтобы он использовал больше   чем от 10 до 15 мегабайт оперативной памяти и   CPU, даже при нашей самой большой нагрузке. наш   Графики ганглиев не лежат: мы сократили вдвое   наши требования к памяти удвоили нашу   пропускной способности исходящей сети и   полностью выровняли нашу нагрузку. Мы   в основном проблем не было   мы установили это.

ответил Travis Northcutt 18 PM00000060000000931 2010, 18:35:09
25

Установите срок действия на стороне клиента для таких вещей, как css, images, JavaScript и т. д., которые не нужно перезагружать для каждого просмотра страницы. Это, безусловно, сильно повлияло на время загрузки моего сайта. Самая быстрая загрузка - это скачивание, которое никогда не происходило ...

# BEGIN Expire headers
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 7200 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 2592000 seconds"
  ExpiresByType text/javascript "access plus 2592000 seconds"
  ExpiresByType application/x-javascript "access plus 2592000 seconds"
  ExpiresByType text/html "access plus 7200 seconds"
  ExpiresByType application/xhtml+xml "access plus 7200 seconds"
</IfModule>
# END Expire headers

# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
  <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\\.(css)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\\.(js)$">
    Header set Cache-Control "max-age=2592000, private"
  </FilesMatch>
<filesMatch "\\.(html|htm)$">
Header set Cache-Control "max-age=7200, public"
</filesMatch>
# Disable caching for scripts and other dynamic files
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
# END Cache-Control Headers

Вы можете предварительно использовать все, что вам разумно (7-zip - хороший инструмент для этого) & загрузите его в том же месте, что и файл, который вы просто загрузили. Измените .htaccess, чтобы обслуживать файлы с предварительной загрузкой, как показано ниже. Предостережение здесь заключается в том, что вам нужно помнить о том, чтобы повторно использовать их, если /когда вы обновляете вещи. Это сокращает накладные расходы процессора, кроме разбора .htaccess.

RewriteEngine on
#Check to see if browser can accept gzip files. If so and we have it - serve it!
ReWriteCond %{HTTP:accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
#make sure there's no trailing .gz on the url
ReWriteCond %{REQUEST_FILENAME} !^.+\.gz$
#check to see if a .gz version of the file exists.
RewriteCond %{REQUEST_FILENAME}.gz -f
#All conditions met so add .gz to URL filename (invisibly)
RewriteRule ^(.+) $1.gz [QSA,L]

Это всего лишь исходный ответ. На эту тему много вариаций. Я сообщил об этом и добавил немало ссылок на более подробные статьи на http: //icanhazdot. нетто /2010/03/23 /некоторые-WordPress-материал /. Прочтите это и, что более важно, ссылки, на которые я указываю, - это хорошие ресурсы.

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

Плагин, который я нашел очень полезным, также wp-minify . Дело в том, что вы должны исключить элементы страницы (контактную форму, слайдер на главной странице и т. Д.), Чтобы не перегружать весь набор css, JS и т. Д. Для каждой страницы. Это хороший способ, чтобы минимизировать, объединить & сжимайте базовый CSS, JS и т. д. Он значительно сокращает количество запросов HTTP. Wp-minify хорошо играет в суперкаши, а также с заголовками истечения, которые я подробно описал выше.

Используйте Yslow в Firebug (Firefox) или аналогично, чтобы отслеживать ваши HTTP-запросы, а что нет и не сжимается. Посмотрите также на заголовки истечения срока действия. Вы скоро увидите, что можете улучшить.

ответил CAD bloke 14 AM00000060000000031 2010, 06:19:00
21

Минимизируйте количество запущенных вами плагинов только для того, что вам действительно нужно. Особо следует помнить о плагинах, которые добавляют javascript и CSS-код при каждой загрузке страницы, даже если этот код не используется на странице.

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

Настройте W3TC на использование CDN (например, Amazon CloudFront или любой другой, поддерживаемый W3TC).

Посмотрите, работают ли параметры Minify для вас (некоторые плагины генерируют js /css, которые не будут хорошо мигрировать, поэтому не забудьте проверить свой сайт после активации функции minify).

Если у вас есть полный контроль над вашим сервером MySQL, убедитесь, что у вас включен query_cache. Используйте скрипт настройки MySQL , чтобы найти другие способы оптимизации конфигурации базы данных.

Если по какой-либо причине использование CDN является проблематичным, настройте mod_expires в настройке apache. Установите срок действия до тех пор, пока это разумно для статических типов, таких как изображения, css, javascript, видео, аудио и т. Д.

ответил Dougal Campbell 12 PM00000040000003031 2010, 16:57:30
13

Запустите memcached и используйте кеш объектов , чтобы уменьшить количество запросов к базе данных. Это кэширует данные из базы данных, а не страниц. Не уверен, что w3-total-cache уже делает это.

Убедитесь, что вы используете кеш-код операции, например APC . (Доступно еще несколько.)

ответил Annika Backstrom 12 PM00000020000001831 2010, 14:44:18
8

В дополнение к использованию плагина кэширования диска, такого как wp-cache, поместите свой блог на том хоста, на котором установлено свойство noatime. В противном случае SSH на ваш хост (если ваш веб-хост предоставляет это) и регулярно запускает эту команду в ваших файлах каждые несколько дней:

chattr -R +A ~/*

~ /* означает «мои файлы в моем домашнем каталоге». Вы можете изменить этот путь по своему усмотрению. Вы также можете установить это в задании cron в cpanel, если ваш веб-хост предоставляет это.

Подробнее о свойствах atime см. . Это значительно ускоряет производительность чтения на диске Linux.

Иногда ваш сайт забивается пауками. Вы можете использовать такой инструмент, как SpyderSpanker или Chennai Central, чтобы отфильтровать пауков, которые не приносят больше места на ваш сайт и просто замедляют его, а затем дросселируют хороших пауков (например, Google, Bing и т. Д.), Отправляя их случайным образом HTTP 304 Не измененные сообщения.

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

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

ответил Volomike 19 AM000000120000005931 2010, 00:02:59
7

Несколько ответов от верхней части головы:

1) Минимизируйте количество HTTP-запросов, которые браузер должен сделать для вашего хоста, путем объединения JavaScript и CSS, где это возможно /практично.

2) Выгрузите как можно больше вашего изображения /носителя в сторонние CDN, особенно если вы используете общий хостинг.

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

3a) Попробуйте использовать тему, которая содержит несколько признанных должностей в полной мере на первой странице, а также все другие, более старые сообщения в виде выдержек.

ответил ZaMoose 19 AM000000120000003531 2010, 00:51:35
6

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

Сделайте это за 2 простых шага. Сначала создайте функцию, которая получает или создает меню, вместо прямого вызова wp_nav_menu.

function get_cached_menu( $menuargs ) {

    if ( !isset( $menuargs['menu'] ) ) {

        $theme_locations = get_nav_menu_locations();
        $nav_menu_selected_id = $theme_locations[$menuargs['theme_location']];
        $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' );
        $transient = 'menu_' . $termslug->slug . '_transient';

    } else {

        $transient = 'menu_' . $menuargs['menu'] . '_transient';

    }


    if ( !get_transient( $transient ) ) { // check if the menu is already cached

        $menuargs['echo'] = '0'; // set the output to return
        $this_menu = wp_nav_menu( $menuargs ); // build the menu with the given $menuargs
        echo $this_menu; // output the menu for this run
        set_transient( $transient, $this_menu ); // set the transient, where the build HTML is saved

    } else {

        echo get_transient( $transient ); // just output the cached version

    }

}

В вашей теме замените wp_nav_menu s на get_cached_menu. Теперь, каждый раз, когда вызывается меню, у вас есть один экземпляр базы данных, а не весь Menubuilding.

Меню часто меняются, но вы также должны подключиться к действию wp_update_nav_menu, чтобы удалить старые переходные процессы.

Сделайте это так:

add_action('wp_update_nav_menu', 'my_delete_menu_transients');

function my_delete_menu_transients($nav_menu_selected_id) {

    $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' );

    $transient = 'menu_' . $termslug->slug . '_transient';

    delete_transient( $transient ); 

}

Меню будет сгенерировано при следующем вызове страницы - и используйте кешированную версию, пока кто-нибудь не обновит меню еще раз.

Обновленная версия

Спасибо @helgatheviking за указание ошибки между слизнями и идентификаторами. Я обновил функции, поэтому он работает как с theme_position, так и с menu (для прямого вызова меню).

Меню всегда сохраняются с именем меню, а не положением в теме.

ответил fischi 27 ThuEurope/Moscow2012-12-27T13:59:13+04:00Europe/Moscow12bEurope/MoscowThu, 27 Dec 2012 13:59:13 +0400 2012, 13:59:13
5

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

Часть кода класса базы данных может быть найдена в wordpress trac, она не превратилась в ядро ​​( Билет № 11799 и связанные с ним ).

ответил hakre 18 PM000000120000004331 2010, 12:46:43
4

Для сайта с высокой нагрузкой вы должны настроить все буферы MySQL для существующего содержимого. Независимо от версии WordPress, Уровень MySQL может быть сконфигурирован в конфигурации .

Фактически, если у вас есть данные InnoDB без включения innodb_file_per_table, вам необходимо очистить InnoDB, разбив каждую таблицу на собственное физическое табличное пространство . Можно сделать приличную настройку MySQL даже если у вас ограниченное оборудование . Существует множество сценариев для выполнения таких оптимизаций InnoDB .

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

ответил RolandoMySQLDBA 16 AMpSat, 16 Apr 2011 02:09:06 +040009Saturday 2011, 02:09:06
3

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

ответил Scott M. 12 PM00000040000002831 2010, 16:27:28
3

Недавно я рассказывал об этом в WordCamp Houston , Все вышеприведенные рекомендации являются отличными, и важно убедиться, что все элементы интерфейса полностью оптимизированы, и вы можете приступить к работе над проблемами кэширования и производительности сервера.

Прогрессивный рендеринг сделает ваши страницы более быстрыми, потому что пользователь увидит содержимое страницы до полной загрузки. Для этого убедитесь, что блокировка js находится в самом низу страницы, а css - вверху.

Также, если вы используете множество кнопок социальных сетей, вы можете настроить сценарии, чтобы они загружались в iframe после полной загрузки страницы. Я написал учебник о том, как это сделать с помощью кнопки TweetMeMe re tweet (теперь устаревшей, так как Twitter выпустил собственную кнопку ретвита), но все равно можно применить к другим кнопкам обмена.

Для производительности сервера загляните в Nginx в качестве прокси-сервера для статического контента, в котором Apache обрабатывает тяжелый PHP и MySQL.

ответил Chris_O 19 AM000000100000000131 2010, 10:42:01
2

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

Это освободило 500 МБ памяти на моем виртуальном частном сервере.

ответил nottinhill 23 22010vEurope/Moscow11bEurope/MoscowTue, 23 Nov 2010 04:21:20 +0300 2010, 04:21:20
1

Руководство по замедлению плагина

Существует очень простой плагин под названием Время загрузки страницы , который добавляет таймер к нижнему колонтитулу страницы. На самом деле это всего четыре строки кода:

<?php
function ur_pageload_footer() {
    printf(__('Page in %s seconds', 'pageload'), timer_stop());
}
add_action('wp_footer', 'ur_pageload_footer')

Тогда:

  1. Создать таблицу
  2. Список всех активных плагинов и их размещение там
  3. Обновите страницу три раза, указав время загрузки страницы каждый раз.
  4. Просматривайте свои плагины один за другим, дезактивируя их
  5. Повторите шаг 3
  6. Обратите внимание на то, что вы отключили плагины

Ваша электронная таблица должна выглядеть примерно так:

+-------+-------+-------+-------+--------+
| Run 1 | Run 2 | Run 3 | Order | Plugin |

Итак, если после деактивации плагина время отклика страницы значительно возрастает, вы можете увидеть, можете ли вы избежать этого плагина.

Я нашел два плагина, которые вызвали «значительное» замедление mqtranslate и (довольно старый, но хороший ) Многоуровневый плагин навигации .

ответил icc97 21 +04002014-10-21T18:54:22+04:00312014bEurope/MoscowTue, 21 Oct 2014 18:54:22 +0400 2014, 18:54:22
0

Придерживайтесь плагина W3 Total Cache для функций кеширования в WordPress. Включите кеширование страниц и кеширование базы данных со страницы настроек плагина. Убедитесь, что вы выбрали «Альтернативный кэш PHP (APC /APCu)» в качестве механизма кэширования. НЕ активируйте мини-код в W3 Total Cache, так как у вас много шансов разбить внешний вид и /или функциональность вашего сайта. Мы оставим его в Cloudflare.

Как только вы закончите настройку остальных функций плагина, настройте Cloudflare для своего сайта. Убедитесь, что вы включили Cloudflare в настройках общего кэша W3 также в разделе «Расширения».

Cloudflare - это сеть доставки контента, которая кэширует все статическое содержимое (файлы изображений, CSS, JS, документы и т. д.) с вашего сайта и служит для ваших посетителей со своих глобальных серверов. Это может ускорить загрузку страниц и снизить нагрузку на ваш сервер. Список типов файлов, которые кэшируются с помощью проверки Cloudlfare этот список . Кроме того, Cloudflare имеет бесплатный план.

В Cloudflare установите уровень кеширования на стандарт и установите срок действия кеша браузера на что-то, по крайней мере, более 20 часов. Включите Always Online ™, чтобы, даже если ваш сервер опустился, Cloudflare будет обслуживать статические страницы вашего веб-сайта из своего кеша. Также включите их функцию автоматического миниатюры (помните, почему я попросил вас не включать мини-код W3 Total Cache? Потому что Cloudflare делает это лучше!) Затем установите Rocket Loaderâ € ¢ в автоматический.

Вот выдержка из того, что делает Rocket Loader:

  • Уменьшение количества сетевых запросов путем объединения JavaScript файлы, даже сторонние ресурсы, чтобы избежать замедления страницы рендеринга.

  • Асинхронная загрузка скриптов, включая сторонние скрипты, так что что они не блокируют содержимое вашей страницы от загрузки
    немедленно.

  • Кэширование скриптов локально (с помощью LocalStorage, доступного в большинстве случаев браузеров и смартфонов), поэтому они не переустанавливаются, если только необходимо.

Более подробную информацию можно найти .

Если возможно, переходите к структуре Genesis для WordPress, потому что они чисты без любого раздувания. Бытие было построено со скоростью и SEO в виду. Я сам протестировал его, и мои оценки в PageSpeed ​​были хорошими. Также, если вы используете Genesis, не забудьте включить кеш фрагмента в настройках W3 Total Cache.

Так как теперь вы используете Cloudlfare в качестве CDN, вы можете использовать плагин типа « Imagify » или « Compress JPEG & PNG images 'от TingPNG для сжатия ваших изображений. Оба являются бесплатными плагинами, доступными в репозитории WordPress.org. Кроме того, Imagify поддерживает мощный алгоритм сжатия с потерями.

Наконец, установите плагин « Удалить строки запроса из статических ресурсов » из репозитория WordPress, чтобы он удалял строки запроса из статических ресурсов, таких как CSS & JS-файлы. Это связано с тем, что ресурсы с «?» Или «и» в URL-адресе не кэшируются некоторыми серверами кэширования прокси (помните, Cloudflare также является сервером кэширования прокси).

Затем установите плагин Использовать Google Libraries . Этот плагин позволяет вашему сайту WordPress использовать API-интерфейс API библиотеки AJAX Google, а не обслуживать эти файлы непосредственно из вашей WordPress.

Некоторые из преимуществ:

  • Увеличивает вероятность того, что пользователь уже кэширует эти файлы.
  • Делает дополнительную нагрузку с вашего сервера.
  • Использует сжатые версии библиотек (если они доступны).
  • Серверы Google настроены для согласования сжатия HTTP с помощью запрашивающий браузер.

И последнее, но не менее важное: используйте плагин ' WP-Optimize от Ruhani Rabin для очистки и оптимизации вашей базы данных.

Надеюсь, это ответит на ваш вопрос в отношении оптимизации WordPress для снижения нагрузки на сервер.

ответил Antony Agnel 16 32016vEurope/Moscow11bEurope/MoscowWed, 16 Nov 2016 14:17:52 +0300 2016, 14:17:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132