网站速度很慢?使用 WordPress 短时缓存(Transients)来优化数据库查询和 HTTP 响应!

百科知道 网站建设 SEO相关 html5网站速度很慢?使用 WordPress 短时缓存(Transients)来优化数据库查询和 HTTP 响应!已关闭评论247阅读模式

每个人都想要一个速度很快的网站,网站速度越快,用户停留和点击页面或购买产品的时间就越长,加快网站速度的方法之一是开启缓存,而缓存背后的逻辑就是存储信息,更具体一点说,就是找到一个比连接数据库更快的存储信息的地方。

在 WordPress 中,如果一些复杂的 SQL 查询或者耗时的 HTTP 请求,其实它们的结果在一定时间内是不变的,那么为了网站速度,如果把这些操作的结果缓存起来,这样下次进行同样的 SQL 查询和 HTTP 请求的时候,就可以直接从缓存中获取数据,从而可以显著加快网站的速度,当然一些复杂计算的结果也可以通过该方法进行缓存。+

那么在 WordPress 中如何快速缓存 SQL 查询和 HTTP 响应呢?这个时候就要用到 WordPress 的短时缓存(Transients)功能。

什么是短时缓存(Transients)

我们知道 WordPress 缓存有多种类型,比如对象缓存、浏览器缓存、页面缓存甚至数据库缓存,每种类型都有其用途和设置步骤,比如需要安装插件和更改服务器配置以启用对象缓存等。

那么今天介绍的 Transients API,是 WordPress 用于在页面加载期间临时存储 WordPress 中的信息,Transients 本身是“短暂的”或“临时的”意思,那么 Transients API 可以理解为临时缓存或者短暂缓存的意思,我这里将它翻译成短时缓存,它是 WordPress 用来缓存一些复杂的 SQL 查询和运算结果的最简单的方法。

它给这些需要缓存的数据一个过期时间,并且时间一到就会自动删除,所以在制作 WordPress 插件的时候,需要存储一些有一定生命周期的数据的时候,Transients API 就是最好的选择。

简单说,Transients 是一种非常强大的工具,它不仅可以用来避免对页面内容进行不必要的数据库请求,还可以加快生成复杂标记的速度并加快耗时的第三方 API 请求。

WordPress Transients API 可以与 Redis 缓存完美结合,显著提升网站性能。下面是具体的步骤,将 Transients API 与 Redis 缓存结合使用:

配置 Redis 缓存

  1. 确保 Redis 服务正在运行 确保你的服务器已经安装并启动了 Redis 服务。如果没有安装,请先进行安装并启动。
  2. 安装 Redis 插件 安装并激活 Redis 插件,例如
  3. 配置 wp-config.phpwp-config.php 文件中添加 Redis 连接配置:
    php
    define('WP_REDIS_CONFIG', [
        'token' => '',
        'host' => '127.0.0.1',
        'port' => 6379,
        'database' => 1, // change for each site
        'maxttl' => 3600 * 24 * 7, // 7 days
        'timeout' => 1.0,
        'read_timeout' => 1.0,
        'prefetch' => true,
        'split_alloptions' => true,
        'strict' => true,
        'debug' => false,
        'prefix' => 'your-site-' // 缓存键前缀
    ]);
    
    define('WP_REDIS_DISABLED', false);
    

使用 Transients 缓存

1. 缓存复杂查询或 HTTP 请求

例如,要缓存作者的文章浏览量总和:

php
function get_author_views($post_author) {
    // 设置缓存键
    $cache_key = 'author_views_' . $post_author;
    // 尝试从缓存中获取结果
    $cached_views = get_transient($cache_key);

    // 如果缓存中没有结果,执行数据库查询
    if ($cached_views === false) {
        global $wpdb;

        $cached_views = $wpdb->get_var($wpdb->prepare("
            SELECT SUM(meta_value + 0)
            FROM {$wpdb->prefix}postmeta
            LEFT JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}postmeta.post_id = {$wpdb->prefix}posts.ID
            WHERE meta_key = 'views' AND post_author = %d
        ", $post_author));

        // 将结果存储在缓存中,缓存时间为 1 小时
        set_transient($cache_key, $cached_views, HOUR_IN_SECONDS);
    }

    return $cached_views;
}

2. 清理缓存

当相关数据更新时,清理缓存:

php
function clear_author_views_cache($post_id) {
    $post_author = get_post_field('post_author', $post_id);
    $cache_key = 'author_views_' . $post_author;
    delete_transient($cache_key);
}
add_action('save_post', 'clear_author_views_cache');

你可以直接将我的代码添加到你的主题的 functions.php 文件中。以下是详细步骤:

1. 打开 functions.php 文件

找到你当前使用的主题目录下的 functions.php 文件。通常这个文件位于 wp-content/themes/your-theme/functions.php

2. 添加缓存函数和清理函数

将以下代码复制并粘贴到 functions.php 文件中:

php
// 获取作者文章浏览量总和,并使用短时缓存
function get_author_views($post_author) {
    // 设置缓存键
    $cache_key = 'author_views_' . $post_author;
    // 尝试从缓存中获取结果
    $cached_views = get_transient($cache_key);

    // 如果缓存中没有结果,执行数据库查询
    if ($cached_views === false) {
        global $wpdb;

        $cached_views = $wpdb->get_var($wpdb->prepare("
            SELECT SUM(meta_value + 0)
            FROM {$wpdb->prefix}postmeta
            LEFT JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}postmeta.post_id = {$wpdb->prefix}posts.ID
            WHERE meta_key = 'views' AND post_author = %d
        ", $post_author));

        // 将结果存储在缓存中,缓存时间为 1 小时
        set_transient($cache_key, $cached_views, HOUR_IN_SECONDS);
    }

    return $cached_views;
}

// 清理作者文章浏览量缓存
function clear_author_views_cache($post_id) {
    $post_author = get_post_field('post_author', $post_id);
    $cache_key = 'author_views_' . $post_author;
    delete_transient($cache_key);
}
add_action('save_post', 'clear_author_views_cache');

3. 调用缓存函数

在需要获取作者文章浏览量总和的地方,调用 get_author_views 函数。例如:

php
// 假设你在单个文章页面上显示作者的文章浏览量总和
$post_author = get_the_author_meta('ID');
$views = get_author_views($post_author);
echo 'Total views: ' . $views;

将这段代码添加到你的主题模板文件(例如 single.phpauthor.php)中,适合的地方显示作者的文章浏览量总和。

总结

通过将这些代码添加到 functions.php 文件中,你可以使用 WordPress Transients 来缓存复杂的 SQL 查询结果,并且在相关数据更新时清理缓存。

 
  • 本文由 米粒在线 发表于 2024年12月7日16:28:05
  • 转载请务必保留本文链接:https://www.miliol.org/129247.html
实用软件

winsxs太大了怎么清理

win系统盘空间越来越少,发现winsxs超大。winsxs太大了,怎么清理呢? 显然直接删除这个winsxs文件夹是不行的,这是系统文件夹,直接删除会造成系统损坏。 那怎么办,总不能看着...