درود
بر اساس آموزشهای این فصل سعی کردم به طور آزمایشی فانکشنی را تعریف کنم که عملیات آبجکت کش را انجام میدهد.
متوجه شدم که بهتر است برای هر بخش به طور جداگانه این عملیات را تعریف کرد. این جداسازی متقابلا با مفهوم پاکسازی گرانول (Granular clearing of caches only when needed) در ارتباط است که به پاکسازی انتخابی بخشهای خاصی از حافظه پنهان، به جای پاک کردن کل حافظه پنهان و انجام این کار فقط در مواقع ضروری اشاره دارد.
در بسیاری از سیستمها، پاک کردن کش اغلب به معنای حذف تمام دادههای موجود در حافظه پنهان است. این روش میتواند ناکارآمد باشد، زیرا دادههای مفید و بیفایده همگی در یک عملیات حذف شده و این میتواند باعث کندی موقتی شود. زیرا سیستم مجبور است حافظه پنهان را بازسازی کند.
تمرین:
// In your theme's functions.php file or a custom plugin
/**
* Enable object caching using the Transients API.
*/
function enable_theme_cache() {
// Check if the object cache is available
if (wp_using_ext_object_cache()) {
// Use namespaced cache keys
$sidebar_key = 'mytheme_sidebars';
$header_key = 'mytheme_header';
$posts_key = 'mytheme_posts';
$recent_comments_key = 'mytheme_recent_comments';
// Attempt to get the cached data for sidebars
$cached_sidebars = get_transient($sidebar_key);
// Attempt to get the cached data for header
$cached_header = get_transient($header_key);
// Attempt to get the cached data for posts
$cached_posts = get_transient($posts_key);
// Attempt to get the cached data for recent comments
$cached_recent_comments = get_transient($recent_comments_key);
// Check if the cached data exists before returning it
if ($cached_sidebars && $cached_header && $cached_posts && $cached_recent_comments) {
return array(
'sidebars' => $cached_sidebars,
'header' => $cached_header,
'posts' => $cached_posts,
'recent_comments' => $cached_recent_comments,
);
}
// If the data is not in the cache or posts are being edited, regenerate and set it
$sidebars = // Your sidebar data generation logic goes here
$header = // Your header data generation logic goes here
$posts = // Your posts data generation logic goes here
$recent_comments = // Your recent comments data generation logic goes here
// Set the data in the cache with appropriate expiration times
set_transient($sidebar_key, $sidebars, 3600);
set_transient($header_key, $header, 3600);
set_transient($posts_key, $posts, 60);
set_transient($recent_comments_key, $recent_comments, 120);
return array(
'sidebars' => $sidebars,
'header' => $header,
'posts' => $posts,
'recent_comments' => $recent_comments,
);
}
// Object cache is not available, handle accordingly
return false;
}
// Hook the function to an appropriate action or filter in your theme
// For example, hook it to the 'init' action for general caching and 'save_post' for post updates
add_action('init', 'enable_theme_cache');
add_action('save_post', 'clear_theme_caches_on_post_update');
/**
* Clear the theme caches when blog posts are updated.
*/
function clear_theme_caches_on_post_update($post_id) {
// You might want to add additional checks here based on your requirements
// For example, check post types, user capabilities, etc.
// Clear the caches for different data points
delete_transient('mytheme_sidebars');
delete_transient('mytheme_header');
delete_transient('mytheme_posts');
delete_transient('mytheme_recent_comments');
}
پ.ن: با وجود پلاگینهای بسیار خوبی مانند Docket Cache احتمالا این فانکشنی که نوشتهام کارایی چندانی نداشته باشد. این قطعه صرفا برای درک بهتر ارائه شده است.