Аналіз перешкод у продуктивності мережі з кількома сайтами на WordPress
Мережа з кількома веб-сайтами в WordPress значно полегшує управління багатьма сайтами, але водночас створює особливі виклики з точки зору продуктивності. Зі збільшенням кількості сайтів у мережі запити до бази даних, кешування об’єктів та зчитування даних на всій мережі можуть стати причинами повільної завантаження сайтів. Особливо важливим є питання обробки таблиць мережевих налаштувань.wp_sitemetaу китайській мовіwpmu_optionsУправління є ключовим елементом, проте його часто ігнорують.
Щоразу, коли сторінка завантажується, мережа багатьох сайтів WordPress потребує здійснити певні операції зчитування даних.wpmu_optionsНалаштування мережевого діапазону. Якщо ці параметри не були правильно збережені у кеші, або якщо вони містять велику кількість непотрібних, серіалізованих даних, це призводить до збільшення кількості запитів до бази даних та уповільнення часу відповіді. Погіршення продуктивності проявляється у кількох аспектах: по-перше, збільшується навантаження на сервер бази даних через часте зчитування однієї й тієї самої таблиці; по-друге, PHP витрачає більше ресурсів процесора на обробку серіалізованих даних; по-третє, великі значення параметрів займають більше місця під час передачі даних по мережі та зберіганн
Розуміння суті цих бар’єрів є першим кроком на шляху до оптимізації. Оптимізація – це не просто встановлення плагіна кешування; вона вимагає комплексних заходів як на рівні бази даних, так і на рівні коду, а також архітектури системи, особливо у випадках з багатьма сайтами, які використовують спільну базу даних та ключові файли.
Рекомендуємо до прочитання. Оптимізація WordPress-сайту до найвищого рівня: всебічний посібник від швидкості роботи до покращення позицій у пошукових системах。
Детальне розуміння таблиці WPMU_OPTIONS та її ключових налаштувань
WPMU_OPTIONSЦе основна таблиця даних, яка зберігає налаштування, що стосуються мережі кількох сайтів у WordPress. Вона використовується у мережах з кількома сайтами, на відміну від налаштувань, які применюються лише до одного сайту.wp_optionsФункції цього інструменту схожі на функції інших інструментів, але їх дія поширюється на всю мережу. Усі налаштування, які впливають на всі сторінки мережі – такі як список активованих плагінів, тема мережі, налаштування завантаження даних, параметри
За замовчуванням WordPress виконує певні дії автоматично.get_site_option()Функція призначена для отримання цих параметрів. Проблема полягає у тому, що якщо немає кешу постійних об’єктів (наприклад, Memcached або Redis), її потрібно викликати щоразу.get_site_option()Для кожного запиту буде виконано одне запитання до бази даних. Для завантаженого мережевого сервісу з кількома сайтами це може означати, що щосекунди відбувається тисячі таких запитів.wp_sitemetaЗапит до таблиці.
Однією з поширених пасток щодо продуктивності є обробка великих об’ємів даних під час їх серіалізації. Коли розробники використовують…update_site_option()Коли функція зберігає великий масив даних або об’єкт, він серіалізується та зберігається в базі даних. Часте зчитування та десеріалізація таких великих об’ємів даних споживає значні ресурси. Тому важливоWPMU_OPTIONSКлючовим моментом є зменшення непотрібного зберігання даних та впровадження ефективних механізмів кешування.
Опції аудиту та очищення мережі
Перший крок оптимізації – це аудит поточного стану системи.wpmu_optionsУ таблиці зберігається певна інформація. Ви можете отримати доступ до цієї інформації, виконавши SQL-запит у базі даних “головного сайту” в мережі або за допомогою спеціалізованих плагінів для керування кількома сайтами.
SELECT meta_key, LENGTH(meta_value) as value_size FROM wp_sitemeta ORDER BY value_size DESC LIMIT 20; Цей SQL-запит виведе 20 найбільших мережевих об’єктів разом із їхніми розмірами, що допоможе вам визначити, які з них є “великими споживачами” даних. Зазвичай основними об’єктами для очищення є старі тимчасові дані, невидалені журнали або занадто великі конфігураційні об’єкти. Для об’єктів, які були визнані непотрібними або застарілими, можна використати наступний фрагмент коду для їх ви
Рекомендуємо до прочитання. Повний посібник з оптимізації швидкості веб-сайтів на WordPress: від основ до практичних рекомендацій。
// 谨慎操作:删除指定的网络选项
if (false !== get_site_option('some_large_temp_data')) {
delete_site_option('some_large_temp_data');
} Регулярне виконання таких аудитів та очищень допомагає підтримувати належний стан системи.wpmu_optionsПоєднання простоти та ефективності у створенні таблиць.
Оптимізація логіки читання та збереження основних параметрів
Щодо того, що має бути збережено…wpmu_optionsОптимізація режимів читання та зберігання даних є надзвичайно важливою. Слід уникати їх оновлення при кожному завантаженні сторінки – наприклад, не варто безпосередньо записувати дані, що змінюються в реальному часі, або тимчасові дані, які часто змінюються. Натомість варто використ
Для плагінів чи тем, які ви самі розробили, під час збереження мережевих налаштувань слід дотримуватися стратегії “збереження за потреби”. Під час виконання відповідних дій…update_site_option()Спочатку скористайтеся цим.get_site_option()Отримати старе значення та виконати операцію оновлення лише у випадку, якщо значення справді змінилося – це допомагає зменшити кількість зайвих записів у базі даних.
$old_value = get_site_option('my_network_setting');
$new_value = calculate_new_value();
if ($old_value !== $new_value) {
update_site_option('my_network_setting', $new_value);
} Впровадження ефективної стратегії кешування об’єктів
Кешування об’єктів є основою для покращення продуктивності багатосайтових систем на базі WordPress. Воно зберігає результати запитів до бази даних, відповіді на віддалені запити та результати складних обчислень у швидкій оперативній пам’яті; наступні запити отримуються безпосередньо з пам’яті, що значно зменшує навантаження на базу даних та час обробки коду на PHP.
Налаштування кешу об’єктів для зберігання даних у довгостроковій пам’яті
WordPress підтримує різні бекенди для кешування об’єктів, які зберігаються у пам’яті комп’ютера (перманентно). Найпоширенішими з них є Memcached та Redis. У мережах з кількома сайтами переваги використання такого кешування є ще більш помітними через більший обсяг даних та велику кількість сайтів.
Візьмемо Redis як приклад: вам потрібно встановити сервіс Redis на сервері, а також розширення PHP для роботи з Redis. Після цього…wp-config.phpДодайте відповідні налаштування до файлу. Для кількох сайтів важливим параметром є використання глобальної групи кешу або логіки перемикання між сайтами, щоб гарантувати унікальність ключів кешу в мережі та уникнути забруднення даних між різними сайтами.
Рекомендуємо до прочитання. Як оптимізувати базу даних WordPress для значного покращення швидкості завантаження веб-сайту。
// 在 wp-config.php 中配置Redis对象缓存
define('WP_REDIS_CLIENT', 'predis');
define('WP_REDIS_SCHEME', 'tcp');
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
// 对于多站点,建议添加一个前缀,或在代码中处理缓存组
define('WP_REDIS_PREFIX', 'my_network_'); Після встановлення та активації відповідного плагіна для кешування об’єктів (наприклад, Redis Object Cache), WordPress автоматично почне використовувати ці можливості для покращення продуктивності.get_site_option()Результати запитів потрібно зберігати у кеші.
Кешування мережевих запитів та транзієнтні дані
Окрім основного кешу об’єктів, WordPress Transients API є чудовим інструментом для розробки багатосайтових систем. Транзієнтні дані (transient data) – це дані, які зберігаються у кеші з певним терміном дії. Для даних, які потрібно обчислити в мережі, але для яких не вимагається надвисока оперативність, слід віддавати перевагу використанню транзієнтного кешу.set_site_transient()和get_site_transient()。
Наприклад, підрахунок загальної кількості користувачів чи сайтів у мережі є відносно трудомістким процесом, але дані не потребують оновлення щосекунди. Ви можете зберігати їх у кеші протягом години.
function get_cached_network_site_count() {
$count = get_site_transient('network_site_count');
if (false === $count) {
// 缓存不存在或已过期,执行数据库查询
$count = get_blog_count(); // 假设这个函数较耗时
// 缓存12小时
set_site_transient('network_site_count', $count, 12 * HOUR_IN_SECONDS);
}
return $count;
} Це гарантує, що дорогі запити до бази даних виконуються лише один раз на годину, а не щоразу під час завантаження сторінки.wpmu_optionsМиттєві дані з…_site_transient_*Сам об’єкт також має бути збережений у кеші для прискорення обробки даних на бекенді.
Оптимізація роботи високоєфективних кеш-систем та файлових систем
Окрім кешування об’єктів, кешування на рівні сторінок та оптимізація файлової системи також мають вирішальне значення для підвищення швидкості завантаження багатьох сайтів. Ці стратегії з різних аспектів зменшують час відповіді сервера
Налаштування кешування сторінок для сумісності з кількома веб-сайтами
Кешування сторінок (Page Caching) передбачає зберігання всієї рендерованої HTML-сторінки. Під час відвідування анонімним користувачем повертається статична HTML-версія сторінки без використання PHP-скриптів та бази даних. Це значно прискорює завантаження сторінок, особливо для тих, що не змінюються часто (наприклад, статей чи інших сторінок сайту).
Для багатьох веб-сайтів необхідно вибрати плагін кешування, який підтримує мережеве активацію та налаштування на рівні мережі, такі як WP Rocket (комерційна версія), W3 Total Cache або Cache Enabler. Під час налаштування слід враховувати наступні моменти: по-перше, переконайтеся, що каталог кешування знаходиться у правильному місці./wp-content/cache/По-перше, всі сайти в мережі мають бути доступними для запису, а їхні імена мають бути чітко розділені, щоб уникнути конфліктів; по-друге, необхідно розумно встановлювати термін придатності кешу, забезпечуючи баланс між продуктивністю та свіжістю контенту; по-третє, слід налаштувати правила попереднього завантаження (префічування) к
На сервері Nginx можна налаштувати більш ефективні правила статичного оброблення вмісту. Ось спрощена фрагмента конфігурації Nginx, яка призначена для безпосереднього надання доступу до вже збережених у кеші HTML-файлів:
set $cache_uri $request_uri;
if ($request_method = POST) { set $cache_uri 'nocache'; }
if ($query_string != "") { set $cache_uri 'nocache'; }
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php)") {
set $cache_uri 'nocache';
}
# 检查缓存文件是否存在
if (-f "/path/to/wp-content/cache/page_${host}${cache_uri}index.html") {
expires max;
add_header X-Cache-Status "HIT";
rewrite ^ /wp-content/cache/page_${host}${cache_uri}index.html break;
} Оптимізація обробки статичних ресурсів та завантаження файлів
Мережі з кількома сайтами зазвичай містять велику кількість медіафайлів, тому оптимізація їхнього завантаження може безпосередньо покращити користувацький досвід. По-перше, переконайтеся, що всі статичні ресурси (CSS, JavaScript, зображення) розповсюджуються за допомогою CDN (мережі доставки контенту). Це можна зробити за допомогою плагінів або шляхом внесення відповідних змін у налаwp-config.phpЦе можна зробити за допомогою URL, що містяться у відповідних тематичних файлах. Наприклад, для визначення константи CDN, яка працює в мережевому режимі:
// 在 wp-config.php 中定义CDN域名
define('WP_CONTENT_URL', 'https://cdn.yourdomain.com/wp-content'); По-друге, необхідно оптимізувати структуру завантажуваних файлів. За замовчуванням шляхи для завантаження файлів на кілька сайтів виглядають таким чином:/wp-content/uploads/sites/{BLOG_ID}/Переконайтеся, що файлова система сервера є ефективною (наприклад, використовується SSD), та розгляньте можливість її оновлення.uploadsКаталоги монтуються за допомогою символьних посилань на спеціальні дискові розділи чи сервіси об’єктного зберігання даних (наприклад, Amazon S3, Google Cloud Storage), що допомагає зменшити навантаження на основний сервер з точки зору операцій введення-виведення (I/O).
Щодо зображень, обов’язково використовуйте технологію лінивого завантаження (Lazy Load) та новітні формати зображень, такі як WebP. Багато плагінів для кешування чи спеціалізованих інструментів оптимізації зображень (наприклад, ShortPixel, Imagify) підтримують масове конвертування та оптимізацію зображень на рівні мережі.
Наостанок, не можна ігнорувати регулярне обслуговування бази даних.wp_sitemeta、wp_optionsРегулярна оптимізація таблиць (OPTIMIZE TABLE) та виправлення помилок на різних сайтах, а також у основних таблицях, що містять статті та коментарі, допомагає підтримувати найкращу продуктивність запитів до бази даних. Для ефективної оптимізації необхідно постійно відстежувати показники продуктивності за допомогою інструментів моніторингу (наприклад, New Relic чи плагінів типу Query Monitor).
підсумок
Оптимізація швидкості завантаження мережі з кількома сайтами на WordPress є системним процесом, який потребує спільних зусиль з боку різних компонентів: бази даних, коду, кешу та інфраструктури. Ключовим моментом є розуміння особливостей цих компонентів та впровадження еwpmu_optionsМеханізми зберігання та зчитування даних допомагають зменшити навантаження на базу даних шляхом аудиту, очищення даних, їх оптимізації та вдосконалення логіки обробки інформації. На цій основі обов’язкове впровадження механізмів кешування даних (наприклад, Redis) є ключем до досягнення високої продуктивності – це дозволяє перетворювати часті мережеві запити на операції зчитування з пам’яті. Крім того, поєднання таких інструментів, як кешування сторінок, розподіл контенту через CDN (Content Delivery Network), оптимізація файлової системи тощо, дозволяє створити надійну та ефективну мультисайтову архітектуру. Пам’ятайте, що моніторинг, вимірювання та постійне вдосконалення є ключовими факторами для пі
Часті запитання
Чи може оптимізація параметрів WPMU_OPTIONS вплинути на нормальну роботу плагінів?
Ні. Якщо ваші дії з очищення та оптимізації ґрунтуються на результатах аудиту та ви видаляєте лише ті дані, які справді є непотрібними або були створені вашими власними плагінами, це не вплине на основні функції програми чи інші плагіни. Рекомендуwp_sitemetaЗробіть повний бекап таблиці та спочатку перевірте її в тестовому середовищі. Принцип оптимізації полягає у тому, щоб “видаляти лише непотрібні дані, не торкаючись основної інфраструктури”.
Як вибрати між Redis та Memcached для кешування даних на кількох веб-сайтах?
Обидва продукти є відмінними рішеннями для підтримки кешування даних у форматі позачасового зберігання (персистентного кешу). Redis пропонує більш широкий спектр функцій, підтримує зберігання даних на диску та роботу з більш складними структурами даних, тому ідеально підходить для ситуацій, де обсяг даних великий, необхідно забезпечити їхнє постійне зберігання чи використовувати складніші функції. Memcached, навпаки, має простішу архітектуру та може ефективніше використовувати оперативну пам’ять на багатокорейових серверах, що робить його класичним вибором для чисто пам’ятних кеш-систем. Для більшості мереж з кількома сайтами, якщо у сервераїв достатньо оперативної пам’яті та немає потреби у зберіганні даних на диску, вибір
Чи потрібно окремо налаштовувати плагіни кешування сторінок на кожному сайті в мережі?
Це залежить від плагіна. Якісні плагіни кешування, розроблені для кількох сайтів (наприклад, W3 Total Cache), дозволяють виконувати глобальну налаштування через інтерфейс системного адміністратора та застосовувати ці налаштування до всіх сайтів у мережі. Крім того, адміністратори підсайтів можуть вносити обмежені зміни до глобальних правил (наприклад, виключати певні сторінки). Під час вибору плагіна обов’язково перевірте, чітко зазначено в його документації підтримку налаштувань на рівні всієї мережі (“Network Wide”).
Чи буде функція get_site_option все ще здійснювати запити до бази даних після увімкнення кешу об’єктів?
Так, але частота використання значно знизиться. Коли кешування об’єктів для зберігання даних на довгий термін налаштовано правильно та функціонує ефективно,get_site_option()Функція спочатку перевіряє, чи є відповідний результат у кеші. Якщо кешове запитання вдається виконати (cache hit), то значення повертається безпосередньо з кешу, без жодного запиту до бази даних. Запит до бази даних виконується лише у випадку, якщо кешове запитання не вдається виконати (cache miss) або коли термwp_sitemetaПісля завершення запиту таблиця автоматично заповнюється новими результатами та зберігається у кеші для подальшого використання. Таким чином, запити до бази даних виконуються лише у випадку, коли кеш стає недійсним.
Наступний крок, що робити далі?
Для подальшого читання та практичних знань
Наступні матеріали пов'язані з темою цієї статті і можуть бути корисними для подальшого вивчення. Зазвичай краще починати з статей, які найбільш тісно пов'язані з вашим поточною проблемою, а потім поступово переходити до суміжних тем.
- 10 ключових стратегій та практичних порад для покращення продуктивності веб-сайту на платформі WooCommerce
- Основні принципи оптимізації WordPress:
- Як оптимізувати швидкість веб-сайту на WordPress: повний посібник від повільного завантаження до миттєвого запуску
- Повний посібник з оптимізації швидкості веб-сайтів на WordPress: найкращі практики від діагностики до розгортання
- Посібник з оптимізації веб-сайтів на WordPress: підвищення швидкості завантаження та покращення користувацького досвіду