Об'єктний кеш + Пакетна обробка запитів — Продуктивність для підприємств | Field Forge - Кастомні поля, створені для швидкості
Завантажити Увійти

Об’єктний кеш + Пакетна обробка запитів — Продуктивність для підприємств

Основи об’єктного кешу WordPress

Функції wp_cache_* WordPress забезпечують кешуючий шар, який знаходиться між вашим кодом і базою даних. За замовчуванням WordPress використовує кеш в пам’яті на запит (очищується в кінці кожного запиту). З постійним об’єктним кешем, таким як Redis або Memcached, кеш зберігається між запитами — наступні перегляди сторінок звертаються до кешу замість бази даних.

На сайті з високим трафіком з Redis:

  • Перше перегляд сторінки: отримує з бази даних, зберігає в Redis
  • Друге перегляд сторінки (ті ж дані): звертається до Redis, повністю пропускає базу даних
  • Третє перегляд сторінки: звертається до Redis

Для навантажень, що вимагають читання, це покращення продуктивності в 10–100 разів.

Field Forge та об’єктний кеш

Кожне значення поля, яке читається в 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 (окремо від інших плагінів)
  • Термін дії — 1 година за замовчуванням, налаштовується через фільтр
  • Обробка пропусків кешу — переходить до запиту бази даних, потім кешує результат

Недійсність кешу

Коли значення поля оновлюється або видаляється, 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:

Redis

Найбільш поширений для керованого хостингу WordPress. Безкоштовні плагіни: “Redis Object Cache” або “W3 Total Cache” з увімкненим Redis. Забезпечує постійне кешування між запитами.

Memcached

Старіший, але все ще підтримується. Плагіни: “Memcached” або “W3 Total Cache.”

APCu

Кешування на одному сервері, яке швидше, ніж 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

З об’єктним кешем Redis (теплий кеш)

Дія Час
Перегляд одиночного поста 3ms (попадання кешу)
Архів (20 постів) 12ms (попадання кешу)
Категорія WooCommerce (30 продуктів) 18ms

З об’єктним кешем Redis + batch_load на холодному кеші

Дія Час
Перегляд одиночного поста 12ms (1 запит + заповнення кешу)
Архів (20 постів) 95ms (1 пакетний запит + заповнення кешу)
Категорія WooCommerce (30 продуктів) 142ms (1 пакетний запит + заповнення кешу)

Комбінація об’єктного кешу та пакетного завантаження є вражаючою на сайтах з високим трафіком.

Моніторинг продуктивності кешу

Field Forge надає команди WP-CLI для моніторингу продуктивності кешу:

“`bash

Показати статистику кешу

wp fieldforge cache stats

Вихід:

Попадання кешу: 94.3%

Пропуски кешу: 5.7%

Середній час попадання: 0.2ms

Середній час пропуску: 8ms

“`

Для сайтів, де рівень попадання кешу низький (менше 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, включаючи безкоштовну.

Асистент ШІ Forge Онлайн

Привіт! Я асистент ШІ Field Forge. Запитайте мене про будь-що щодо плагіна — налаштування, можливості, усунення несправностей чи розробку.

Щойно
Працює на Forge AI · Переглянути документацію