WP Super Cache vs HyperCache vs W3 Total Cache vs MaxSite Cache

Сравнение различных плагинов кэширования для WordPress

Для написано много кэширующих плагинов, предназначенных для борьбы со слабой производительностью сервера (либо кривыми руками администратора, который не в состоянии настроить PHP/MySQL). Простой пользователь зачастую задаётся вопросом: какой же из плагинов выбрать?

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

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

Поехали.

  1. WP Super Cache написан Donncha O’Caoimh, одним из разработчиков WordPress. Про своё отношение к этому плагину я уже писал. Плагин разрабатывался как замена WP-Cache. Ключевой особенностью плагина является генерация статических HTML-страниц таким образом, что они будут отдаваться Web-сервером — минуя PHP.
  2. Hyper Cache. С ним я тоже сталкивался, и какое-то время плагин стоял у меня на сайте. Плагин написан гораздо проще, чем WP Super Cache и имеет более высокий рейтинг на wordpress.org.
  3. W3 Total Cache — новое слово в кэшировании. Поддерживает сжатие скриптов, CSS, кэш для базы данных, работу с CDN и многое другое.
  4. MaxSite Cache — отечественная разработка, при этом платная. Я тестировал Lite-версию, так как покупать полную версию чисто для тестирования желания нет. По словам автора, выйдет абсолютным победителем при сравнении с WP Super Cache и компанией.

Для теста была взята машина такое конфигурации: Intel(R) Xeon(R) CPU X3320 @ 2.50GHz, 4 ядра, 3 MiB кэш, 8 GiB DDR-2 RAM, 2×500 GB SATA, RAID1 (ARC-1210 4-Port PCI-Express to SATA RAID Controller), 82572EI Gigabit Ethernet Controller.
Операционная система: Ubuntu 9.10 64-bit Server Edition
Веб-сервер: nginx 0.8.19
PHP: 5.2.10.dfsg.1-2ubuntu6.1 (FastCGI) + xCache 1.2.2-5, 75 процессов.

На тестируемой странице 25 несложных запросов, время их выполнения — 0.00993 сек.

На сайт натравливался ApacheBench — 10,000 запросов в 100…500 потоков. Это создаёт весьма приличную нагрузку, так как запросы идут один за другим.

Базовая  — 100 параллельных потоков. Я увеличивал количество потоков до тех пор, пока web-сервер не стал отдавать ответ, отличный от 200. Более 500 потоков не тестировал.

  WordPress WP Super Cache 0.9.7 Hyper Cache 2.6.2 MaxSite Cache Lite W3 Total Cache 0.8
Количество потоков 100 100 500 100 250 100 500 130 100 130
Время тестирования, с 677.442 1.115 1.079 18.736 8.633 3.291 2.501 2.992 21.284 21.086
Количество ошибок 0 0 0 0 3663 0 2713 0 0 0
Скорость, запрос/с 14.76 8967.28 9268.36 544.20 1158.30 3038.98 3997.80 3341.72 469.84 474.25
Среднее время обработки запроса, мс 6774.423 11.152 53.947 183.757 215.833 32.906 125.069 38.902 212.838 274.116
Среднее время обработки запроса по всем потокам, мс 67.744 0.112 0.108 1.838 0.863 0.329 0.250 0.299 2.128 2.109
Скорость передачи, Кбайт/с 175.12 106154.90 109865.55 6393.68 8754.04 35537.15 34413.87 39075.95 4928.74 4974.58
Порог завершения 95% запросов, мс 9188 11 27 394 268 52 91 58 344 364

То, что не вошло в таблицу: средняя загрузка системы (load average) при тесте голого WordPress зашкаливала за 60. При тесте WP Super Cache и MaxSite Cache я не успевал ее измерить (была ничтожной). С Hyper Cache и W3 Total Cache загрузка доходила до где-то 10. Так что кэширование работает и выполняет свою работу — снижает нагрузку на сервер.

«Голый» WordPress тестировать более, чем со 100 потоками смысла нет :-)

В ходе тестирования выяснился абсолютный лидер — WP Super Cache. Скорость отдачи кэшированных страниц поистине фантастическая — почти 800 мегабит/сек. Хотя такая скорость — это больше заслуга nginx.

MaxSite Cache Lite на 100 параллельных потоках проиграл WP Super Cache практически в пять раз! Причина понятна: WP Super Cache создает статические файлы так, что web-сервер их может отдавать клиенту без привлечения PHP-интерпретатора. А статические запросы при прочих равных всегда быстрее динамических. Так что платить 30 WMZ за полную версию MaxSite Cache я пока не готов :-)

Среди остальных плагинов MaxSite Cache выигрывает благодаря свой простоте: минимум проверок, никаких регулярных выражений и лишних подключаемых файлов. Но даже такой подход не спасёт от хорошего SlashDot-эффекта: какой-то процент пользователей будет видеть ошибку сервера, для других возрастёт время генерации страницы. Это касается и остальных плагинов. Мораль: подключение PHP-интерпретатора — дорогое удовольствие.

По поводу масштабируемости: более 130 потоков не пережил ни один кэш (кроме WP Super Cache).

Аутсайдером, на мой взгляд, оказался W3 Total Cache — при почти одинаковой с Hyper Cache нагрузкой на сервер, время отдачи страниц было значительно выше. Хотя если бы тест был не таким искусственным, то W3 Total Cache могла быть и более высокой. Хотя во многом W3 Total Cache делает то, что опытный системный администратор может настроить на уровне сервера.

Вообще плагины кэширования обладают очень интересной особенностью: они переносят нагрузку с одной подсистемы (процессор) на другую (диск). Так что на десктопном железе, слабых дисках или виртуальных серверах кэш может ухудшить ситуацию: процессор будет тратить время не на выполнение кода, а на ожидание завершения ввода/вывода (iowait). Так что при большом количестве оперативной памяти имеет смысл создавать RAM-диск и помещать кэш на него.

Кстати, даже при хорошей дисковой подсистеме, но при малом объеме оперативной памяти при большом объеме кэша могут возникать проблемы: например, если дисковый кэш у операционной системы мал, то при интенсивном равномерном обращении к разным страницам может возникнуть большая дисковая активность.

Вообще, как показывает мой опыт, прежде чем использовать плагин кэширования страниц, имеет смысл все же грамотно настроить сервер (обращайтесь). Например, если вместо Apache поставить nginx, можно освободить довольно много драгоценной памяти (prefork у Apache — это весьма сильный убийца производительности); если увеличить размер буфера ключей MySQL, можно добиться уменьшения дисковой активности. Если поставить opcode cacher (APC, xCache, eAccelerator), то можно значительно снизить затраты на перекомпиляцию PHP-кода и уменьшить время отклика системы. Если использовать оптимизатор, встроенный в eAccelerator, то можно повысить производительность PHP-кода. Анализ производительности MySQL-запросов и знание принципов работы оптимизатора помогут переписать слабые запросы/добавить отсутствующие индексы в базу данных. Простор для действий довольно-таки большой. И динамика страниц остаётся :-)

Автор: ; опубликовано в: WordPress; метки: Hyper Cache, MaxSite Cache, W3 Total Cache, WordPress, WP Super Cache, нагрузка, производительность
6
Ноя
2009

RSS Комментарии к статье «WP Super Cache vs HyperCache vs W3 Total Cache vs MaxSite Cache» (53)  »

  1. Супер. Спасибо большое. А то я давно задаюсь вопросом, а что же лучше из этих плагинов. Сам я изначально использовал WP Super Cache, значит и отказываться от него нет смысла.

  2. [...] Хочу лишь дать ссылку на относительно свежий обзор плагинов полностраничного кэширования для [...]

  3. [...] данных плагинов и выложил их на своем блоге blog.sjinks.pro. Он показал себя как человека, очень хорошо [...]

  4. Хороший тест, но я бы отметил тот факт, что Hyper Cache кэширует страницы иначе, чем WP Super Cache. Super Cache отдает мертвые файлы с диска, а Hyper Cache отрабатывает через подъем PHP (или fastcgi что в данном случае не суть) и соответственно на страницу можно прикрутить нужную динамику PHP не связанную с БД, она отработает и на закэшированной странице. Естественно 250 процессов занятых на отработку PHP кода это не совсем то-же что тупо отдать 250 (500) файлов с диска. И если смотреть на связку WP Super Cache + ngnix, то здесь вся работа лежит на плечах nginx, который отдает мертвячину, сделанную ранее WP Super Cache. Поэтому напрямую сравнивать эту парочку плагинов не совсем корректно. К тому-же у WP Super Cache неоднозначное поведение в разном окружении (читай – разные хостинги) и таки есть к нему некоторые претензии. Hyper Cache в этом плане более предсказуем и поэтому юным испытателям стоит начать со связки Hyper Cache + File Cache потом добавить nginx, а затем fastcgi. По мере набивания шишек :-)

  5. Через несколько дней после установки W3 Total Cache (nsi.ge) появилась такая проблема:
    Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 491520 bytes) in /home/nsige/public_html/wp-includes/class-simplepie.php on line 4186

    Понимаю что выше Хостера не прыгнуть и что нужно поднять лимит PHP > memory_limit 32M до memory_limit 64M. Но не повторится ли данная проблема? или может ктото даст лучший совет? :)

  6. Здравствуйте, Владимир.
    Помогите оценить – хорошие показатели или не очень.
    100 потоков, 1000 запросов, выполнило за 202 секунды. Запросов в секунду – 4.93. Ошибок не было.
    У меня vds, 2ГГц, 2Гб оперативы, FreeBSD, nginx, XCache, плагинов кеширования, перечисленных у вас в посте, – нет. Есть свое решение – частичное кеширование 3 кусков главной страницы (навигации, блока с комментариями в сайдбаре, всего центрального блока с табами записей). Все это проверяло главную страницу cosydale.com.

    • Пока писал тот комментарий, запустил 10000 запросов в 100 потоков.
      Результат: за 1628 секунд все сделало, отдача морды – 6.14 раза в секунду (могу показать скрин результатов теста).

    • После обновления nginx до 1.0.2, и следования вашему совету вот в этой статье: http://blog.sjinks.pro/wordpress/877-wordpress-caching-with-nginx/ я получил более 4600 успешных запросов в секунду. На весь тест с 10000 запросами в 100 потоков ушло 2 секунды.
      Я рад :)

      Спасибо вам, Владимир, за отличнейший сайт!

  7. rasse1

    Здравствуйте. Подскажите пожалуйста почему плагин super cache отказывается активироваться? После установки сначала появляется надпись что мол нужно поставить права на папку wp content , поставил , надпись пропадает и появляется надпись что нужно прописать в wp config строчку define(‘WP_CACHE’, true); Прописал ее в нужном месте , однако плагин на изменения не реагирует в wp config и активироваться не хочет. Раньше на обычном виртуальном хостинге таких проблем не было , а после перехода на виртуальный сервер вот появилось. Недавно был установлен APC. Я в этом мало что понимаю , быть может проблема лежит на поверхности , но разобраться не могу.

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «WP Super Cache vs HyperCache vs W3 Total Cache vs MaxSite Cache»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा