Intereting Posts
Зависимость подключаемого модуля третьей стороны – как правильно загружать классы Создать электронный бюллетень HTML по сообщениям, опубликованным в диапазоне дат? Отзывчивые изображения. Создание нескольких изображений из загрузки пользовательского элемента Theme. «Кажется, что нет файла wp-config.php». Несмотря на wp-config.php в корне Как перенести поле регистрации на страницу индекса? Как фильтровать пользователей на странице пользователей с помощью настраиваемого мета-поля? Как предотвратить слияние слизняков и клонированных страниц CPT от конфликта друг с другом? Paypal checkout направляет на домашнюю страницу PayPal Как добавить время публикации в список сообщений на странице администрирования? Группировать / список / сортировать персонализированные сообщения типа post по дате в закладках из поля acp datepicker Максимальное количество поддерживаемых версий сообщений WP_Query: сообщения в категории или пользовательский тип сообщения Поле Category Name и Slug должно быть одинаковым, иначе оно разбивает страницы категорий Как использовать задание wp cron для запуска функции array_pop () ожидает массив, имеющий значение boolean для $ event_type_term -> slug

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

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

Solutions Collecting From Web of "Шаги по оптимизации WordPress в отношении нагрузки на сервер?"

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

  • Плагин совместимости nginx

  • HOWTO: установите WordPress на Nginx –

  • Обсуждение Slicehost

  • Как ускорить WordPress с Nginx и WP Super Cache

  • WordPress на nginx + lighttpd + FastCGI + php

  • Nginx в качестве внешнего прокси-кеша для WordPress

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

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

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

Установите срок действия на стороне клиента для таких вещей, как 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.net/2010/03/23/some-wordpress-stuff/ . Прочтите это и, что более важно, ссылки, на которые я указываю, – это хорошие ресурсы.

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

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

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

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

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

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

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

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

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

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

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

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

 chattr -R +A ~/* 

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

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

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

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

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

Несколько ответов от головы:

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

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

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

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

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

Сделайте это за 2 простых шага. Сначала создайте функцию, которая получает или создает меню, вместо wp_nav_menu вызова 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 . Теперь, каждый раз, когда вызывается меню, у вас есть один Databasequery, а не весь 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 (для прямого вызова меню).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 <?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 и (довольно старый, но хороший) многоуровневый плагин навигации .

Придерживайтесь плагина 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 для снижения нагрузки на сервер.