WordPress має низький поріг входження і заохочує експериментування з собою, що непогано для розробників. Але, будучи розгорнуто стандартним чином, WordPress не завжди досить швидкий, щоб сподобатися пошуковим роботам Google.

На щастя, почати оптимізацію WordPress теж нескладно: є кілька прийомів, які допоможуть швидко підняти продуктивність інсталяції:

1. Перевіряйте ваш код на швидкість виконання, починаючи з циклів. З точки зору оптимізації, цикли – легка здобич.

Використовуйте GLPTimer, інспектор кешу або інші подібні інструменти, щоб знайти вузькі місця.

Зосередьте зусилля на основному циклі відображення записів (частіше званому просто «цикл WordPress») та інших великих циклах. Оптимізуйте SQL-запити (див. пункт 2) та інші витратні часу речі (пункти 7 і 15), зазвичай викликаються в циклах.

2. Кэшируйте дані lookup-запитів. Робіть предвыборку з усіх lookup-таблиць і складайте отримані дані в масив.

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

Якщо цикл WordPress може прокрутитися більше одного разу, вийміть їх не в циклі, а заздалегідь, у спеціальному запиті з використанням $wpdb->get_results, і не забудьте вибрати тільки потрібні вам стовпці плюс стовпець-ідентифікатор.

Збережіть результат запиту в масив з ключем-ідентифікатором. Тепер цей масив в основному циклі. Ця стратегія дійсно виправдовує себе при відображенні декількох постів.

3. Слідкуйте за важким кодом консолі адміністратора у файлі functions.php. Якщо ви додали туди свій код, не забудьте обернути його умовою if_admin(), щоб цей код дійсно виконувався тільки тоді, коли ви знаходитесь в консолі.

4. Видалити плагіни. Кожен активний плагін споживає ресурси, сповільнюючи роботу WordPress і роблячи його потенційно нестабільним. Все, що не використовується на сайті, повинно бути вилучено.

Наприклад, на етапі розробки я часто використовую плагін Regenerate Thumbnails, коли налаштовую розмір медіафайлів, а потім забуваю вимкнути його, коли сайт вводиться в дію.

5. Забороніть невикористовувані модулі Apache. Я не знаю стовідсоткового способу визначити, який з них потрібний, а який – ні.

В крайньому випадку, спробуйте забороняти їх по одному, кожен раз перезапуская Apache і перевіряючи сайт. У всякому разі, на своїх хостингах я завжди забороняю mod_ruby, mod_dav, mod_proxy, setenvif і підтримку SVN.

6. Дозвольте інші модулі Apache. Ні, тут немає помилки. Переконайтеся, наприклад, що mod_expires завантажується. А потім прочитайте пункт 12.

7. Внесіть деякі динамічно одержувані значення в код у вигляді констант. Наприклад, позбавтеся від викликів get_template_directory_uri().

Багато хто не погодиться з цим, але мені здається, що призначення цих викликів – зробити так, щоб тема запускалася на різних сайтах. А оскільки ви вже визначилися з тим, на якому сайті вона буде запускатися – приберіть код, що забезпечує переносимість.

Якщо ви ліниві і хочете зібрати вершки, пройдіться header.php, footer.php, sidebar.php і інших файлів, що включається в багато сторінок.

Головний цикл WordPress – ще один хороший кандидат на хардкод-оптимізацію. Також, якщо файли викликаються з циклу, видаліть з них коментарі.

8. Приберіть всі пробіли з ваших шаблонів. Буде чим зайнятися довгими зимовими вечорами, так? Насправді все не так страшно: вам не доведеться робити це в текстовому редакторі. Є інструменти, які впораються з цим за вас.

Спробуйте набрати в терміналі:

php -w original_source.php > cleaned_source.php

Правда, вам доведеться пройтися по всіх файлів теми, а середня тема WordPress складається з 20-30 файлів. Але ви тільки подумайте про всі виграші, які вам обіцяє оптимізація!

9. Використовуйте мінімізовані версії JavaScript-бібліотек. Відкрийте вихідний код вашої головної сторінки і перевірте всі включені файли. Всі ваші JQuery-плагіни мінімізовані?

10. Зверніть увагу на файли стилів. Мінімізуйте їх. Попрацюйте з інструментами, визначальними невикористовувані CSS-елементи.

11. Якщо відчуваєте натхнення, спробуйте Apache-модуль PageSpeed від Google. Деякі помічають проблеми з ним, але я вже встиг встановити його на 4 сайтах, і поки дуже задоволений збільшеною швидкістю. Також зверніть увагу на плагін WP Super Cache.

12. Дослідіть завантаження вашого сайту в браузері. Використовуйте інструмент Inspector ; Network Requests в Safari або вкладку Network у властивостях сторінки в браузері Google Chrome, щоб побачити тимчасову діаграму завантаження сторінки.

Зверніть увагу на відповідь сервера з приводу статики (JS, CSS, зображення). Якщо сервер постійно відповідає «200», спробуйте внести в файл .htaccess, розташований в корені вашого сайту, наступні параметри:

FileETag MTime Size
ExpiresActive on
ExpiresByType image/gif «access plus 86400 seconds»
ExpiresByType image/png «access plus 86400 seconds»
ExpiresByType text/css «access plus 86400 seconds»
ExpiresByType text/javascript «access plus 86400 seconds»
ExpiresByType application/application/x-shockwave-flash «access plus 86400 seconds»

13. Уважно придивіться до хостингу. Знову дослідіть Network Requests, на цей раз, звернувши увагу на самий перший елемент запиту – сам HTML-файл.

Буде присутня певна затримка у виконанні першого запиту. Якщо, незважаючи на те, що всі попередні рекомендації по відношенню до php-коду були виконані, затримка становить понад 500 мілісекунд, зверніть увагу на завантаження сервера, кількість вільної пам’яті та загальну порівнянність сервера покладеним на нього завданням.

Якщо ви на дешевому хостингу, раджу вибрати більш дорогий тариф або змінити хостинг-провайдера. Якщо у вас багато сайтів, раджу перейти на віртуальний сервер.

Якщо ви не готові зайнятися адмініструванням свого віртуального сервера, для вас існують віртуальні хостинги з попередньою настройкою LAMP-стека – найкраще з обох світів.

14. Gzip. У тому ж Safari порівняйте цифри в колонках Size і Transferred. Якщо вони однакові, значить, HTML не стискається перед віддачею на сервері. Встановіть та налаштуйте mod_deflate. Є хороше опис цього процесу.

15. Економте час. Якщо ви використовуєте php-функції rand() або mt_rand(), замініть їх на openssl_random_pseudo_bytes().

16. Налаштуйте Apache. Якщо ваш хостинг дозволяє настроїти деякі параметри веб-сервера.

Якщо ви не робили це раніше, повинен вас попередити, що Apache досить просто налаштувати так, щоб він падав під час пікового навантаження, забирав всю пам’ять в системі і вимагав регулярного рестарту.

Так що прочитайте що-небудь перед тим, як приступити до конфігурації.

17. Оптимізація .htaccess. Якщо ви не чіпали дефолтний файл .htaccess з інсталяції WordPress, вам слід пропустити цей пункт.

Але якщо ви вже додали чи збираєтеся додати в нього що-небудь, постарайтеся звести ваші додавання до мінімуму. Класичний приклад – копіпаст правил проти запуску скриптів з неправильних каталогів, які часто рекомендують хостери.

Я б вважав за краще ризикнути троянської атакою, ніж завантажувати свій сайт купою умовних директив, що виконуються при кожному веб-запиті.

На сьогодні все. Сподіваюся, який-небудь з цих рад допоміг вашого сайту підняти продуктивність.

Переклад статті «WordPress performance: 17 things to do right now» був підготовлений дружною командою проекту Сайтостроение від А до Я.