WordPress
Майстер класи WordPress
Оптимізація WordPress
Опублікував Dmitry Svarytsevych в рубрики Майстер клас, Хаки
Як відомо, одним з найбільших мінусів цієї CMS є її ресурсоємкість, що іноді заставляє розробників задуматись над переходом на інші системи управління контентом чи шукати способи зменшення навантажень. Одним з найефективніших способів є використання плагіна WP Super Cache, який кешує усі сторінки сайту і, замість повторної генерації сторінки, видає збережену копію. На перший погляд, все просто і проблема вже вирішена, але насправді цей спосіб є ефективним лише при очікуванному напливу відвідувачів на одну (кілька) конкретних сторінок.
Пропоную проаналізувати цю проблему більш детально, виділивши усі важливі моменти. Маємо сайт з 1000 сторінок і попередження хостера про надмірне навантаження на сервер.
На графіку навантаження сервера кожної доби чітко виділяється різкий скачок. Можна було б подумати що це пік відвідуваності, проте в статистиці відвідування сайту він не спостерігається. Щоденна регулярність такого піку, відсутність конкретних рекламних заходів та аналіз статистики, дозволяють зробити певні висновки: навантаження на сервер створюють пошукові боти. Саме так, пошукові боти щодня повністю індексують твій сайт, відкриваючи сторінки одну за іншою – можеш собі тільки уявити, яке при цьому навантаження. Спробуємо встановити WP Super Cache? Ось що ми отримаємо: плагін кешування створюватиме ще додаткове навантаження, зберігаючи згенеровані сторінки, причому актуальність закешованих сторінок при стандартних налаштуваннях, становить лише кілька годин. Особливо сильно відчувається кешування, коли включена опція пакування сторінок в gzip. Це означає, що при наступному індексуванні сайту усі сторінки будуть заново кешуватись і проблема залишаєтсья не вирішеною. Звісно, ми можемо збільшити час актуальності сторінок, та це приведе до наступної проблеми. Справа в тому, що популярні сайти часто оновлюються, постійно з’являються нові коментарі, які зазвичай відображаються в сайдбарі. При збільшенні часу актуальності кешованих сторінок, відвідувачі будуть бачити застарілу інформацію, незважаючи на те, що при додаванні коментаря, сторінка оновлюється в кеші, інші сторінки не оновлюються.
З вище сказаного, напрошується один дуже важливий висновок – необхідно розділити кешування окремих блоків сторінок: заголовок та основний текст можна зберігати закешованими місяцями, а динамічні об’єкти такі як останні коментарі, список останніх новин оновлювати щогодини. Таким чином, компонуючи сторінки з кешованих блоків з різним часом актуальності, можна досягнути оптимального навантаження на сервер, не втрачаючи динамічності сайту.
Перейдемо від теорії до практики. Для досягнення цієї мети нам дуже добре підходить модуль кешування з фреймворку Zend, який дозволяє кешувати окремі блоки виводу – можемо окремо зберегти заголовки, основні тексти та більш динамічні блоки сторінок. Отже, модуль кешування я трошки модифікував (підправив шляхи до файлів) та зберіг в wp-includes/cache, а кешована інформація зберігатиметься в wp-content/zcache (не забудь встановити права на запис для цієї папки). Для використання такого кешування нам необхідно відредагувати файли шаблону, візьмемо для прикладу sidebar.php. На початку файлу підключаємо модуль кешування, вказуємо початок та кінець кешованого блоку. Це виглядатиме приблизно так (зразки відредагованих файлів лежать в архіві нижче):
Будь-ласка авторизуйтесь чи зареєеструйтесь щоб побачити прихований текст.
Для заголовків я виставив час актуальності 2 доби (2*24*3600 секунд), а для бокової панелі – годину (3600 секунд). За рахунок такого методу кешування ми значно скорочуємо кількість запитів до бази даних до мінімуму (в моєму випадку – всього 15 запитів та 12Mb виділення пам’яті, до використання кешування було 67 запитів та 27Mb пам’яті). Варто зауважити, що ядро WordPress і надалі завантажується для виводу кешованої сторінки, тому в складних випадках (понад 1000 відвідувачів на добу) випадках варто все ж таки використовувати WP Super Cache.
Завантажити робочі файли Zend Cache (1) (тільки для зареєстрованих користувачів)
P.S. Zend Framework працює тільки на PHP5, відповідно й цей модуль кешування.


I am debating wether to use batcache or this blog author’s plugin, DB Cache. I don’t want to waste a lot of disk space or use CPU too much. I’m not a fan of Super Cache at all though. Its slow, eats CPU, eats space, and serves up expired content more often than it should
Ну, как сказать, понравилось конечно:) Хотя я все равно практически ничего не понял. :)
Смысл есть, ток куда.
мда , можно зделать маленький сборник