Функції wp_cache_* WordPress забезпечують кешуючий шар, який знаходиться між вашим кодом і базою даних. За замовчуванням WordPress використовує кеш в пам’яті на запит (очищується в кінці кожного запиту). З постійним об’єктним кешем, таким як Redis або Memcached, кеш зберігається між запитами — наступні перегляди сторінок звертаються до кешу замість бази даних.
На сайті з високим трафіком з Redis:
Для навантажень, що вимагають читання, це покращення продуктивності в 10–100 разів.
Кожне значення поля, яке читається в Field Forge, проходить через об’єктний кеш:
“`php // У реалізації get_field() Field Forge (спрощено) $cached = wp_cache_get($cache_key, ‘fieldforge’); if ($cached !== false) { return $cached; }
$value = $this->fetch_from_database($post_id, $field_name); wp_cache_set($cache_key, $value, ‘fieldforge’, 3600); return $value; “`
fieldforge:{post_id}:{field_name}fieldforge (окремо від інших плагінів)Коли значення поля оновлюється або видаляється, Field Forge автоматично недійснить відповідні записи кешу:
“php // У update_field() (спрощено) $this->save_to_database($post_id, $field_name, $value); wp_cache_delete("fieldforge:{$post_id}:{$field_name}", 'fieldforge'); “
Недійсність є:
fieldforge/cache/invalidate хукField Forge працює з будь-яким бекендом об’єктного кешу WordPress:
Найбільш поширений для керованого хостингу WordPress. Безкоштовні плагіни: “Redis Object Cache” або “W3 Total Cache” з увімкненим Redis. Забезпечує постійне кешування між запитами.
Старіший, але все ще підтримується. Плагіни: “Memcached” або “W3 Total Cache.”
Кешування на одному сервері, яке швидше, ніж Redis/Memcached для сайтів з нижчим трафіком (без мережевих затримок). Плагіни: “APCu Object Cache.”
Якщо постійний бекенд об’єктного кешу не встановлено, Field Forge повертається до стандартного кешу WordPress на запит. Кешування все ще відбувається в межах одного перегляду сторінки, але не між запитами. Працює скрізь, нульова конфігурація.
Для архівних сторінок та спискових переглядів, де ви відображаєте багато постів одночасно, Field Forge надає API batch_load(), який отримує користувацькі поля для кількох постів в одному SQL запиті:
“`php $post_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; FieldForge::batch_load($post_ids);
// Усі наступні виклики get_field() для цих ID постів звертаються до кешу foreach ($post_ids as $id) { $hero_title = get_field(‘hero_title’, $id); // Кеш потрапив $hero_image = get_field(‘hero_image’, $id); // Кеш потрапив } “`
Без batch_load() вище викликало б 20 окремих SQL запитів (10 постів × 2 поля кожен). З пакетним завантаженням це 1 запит.
Field Forge підключається до фільтра WordPress the_posts, щоб автоматично виконувати пакетне завантаження на будь-якому запиті, який повертає кілька постів:
“php // Внутрішній хук Field Forge add_filter('the_posts', function($posts) { if (!empty($posts)) { $post_ids = wp_list_pluck($posts, 'ID'); FieldForge::batch_load($post_ids); } return $posts; }); “
Архівні сторінки, результати пошуку, категорійні списки та кінцеві точки списку REST API всі автоматично отримують вигоду. Зміни коду у вашій темі не потрібні.
Для викликів WP_Query у користувацьких шаблонах ви можете явно виконати пакетне завантаження після запиту:
“`php $query = new WP_Query([ ‘post_type’ => ‘product’, ‘posts_per_page’ => 30, ‘category_name’ => ‘featured’, ]);
// Пакетне завантаження користувацьких полів для всіх 30 продуктів в одному запиті if ($query->have_posts()) { $post_ids = wp_list_pluck($query->posts, ‘ID’); FieldForge::batch_load($post_ids); }
// Тепер рендеринг циклу є лише кеш-потрапленням while ($query->have_posts()) : $query->the_post(); $price = get_field(‘price’); // Кеш потрапив $sku = get_field(‘sku’); // Кеш потрапив $features = get_field(‘features’); // Кеш потрапив endwhile; “`
На тестовому сайті з 10,000 постів, 15 користувацькими полями на пост:
| Дія | Час |
|---|---|
| Перегляд одиночного поста | 45ms запитів користувацьких полів |
| Архів (20 постів) | 840ms запитів користувацьких полів (N+1) |
| Категорія WooCommerce (30 продуктів) | 1,260ms |
| Дія | Час |
|---|---|
| Перегляд одиночного поста | 3ms (попадання кешу) |
| Архів (20 постів) | 12ms (попадання кешу) |
| Категорія WooCommerce (30 продуктів) | 18ms |
| Дія | Час |
|---|---|
| Перегляд одиночного поста | 12ms (1 запит + заповнення кешу) |
| Архів (20 постів) | 95ms (1 пакетний запит + заповнення кешу) |
| Категорія WooCommerce (30 продуктів) | 142ms (1 пакетний запит + заповнення кешу) |
Комбінація об’єктного кешу та пакетного завантаження є вражаючою на сайтах з високим трафіком.
Field Forge надає команди WP-CLI для моніторингу продуктивності кешу:
“`bash
wp fieldforge cache stats
“`
Для сайтів, де рівень попадання кешу низький (менше 80%), розслідуйте:
“php add_filter('fieldforge/cache/expiration', function($seconds) { return DAY_IN_SECONDS; // Кеш на 24 години }); “
“php add_filter('fieldforge/cache/should_cache', function($should_cache, $field_group) { if ($field_group === 'frequently-changing-group') { return false; } return $should_cache; }, 10, 2); “
“php add_action('fieldforge/cache/invalidate', function($post_id, $field_name) { // Також недійснити пов'язані дані wp_cache_delete("my_custom_cache:{$post_id}", 'my_plugin'); }, 10, 2); “
Отримайте Field Forge — від $35/рік →
Інтеграція об’єктного кешу та пакетне завантаження є в кожній версії Field Forge, включаючи безкоштовну.