網(wǎng)站速度很慢?使用 WordPress 短時(shí)緩存(Transients)來(lái)優(yōu)化數(shù)據(jù)庫(kù)查詢和 HTTP 響應(yīng)!

網(wǎng)站建設(shè) SEO相關(guān) html5 百科知道網(wǎng)站速度很慢?使用 WordPress 短時(shí)緩存(Transients)來(lái)優(yōu)化數(shù)據(jù)庫(kù)查詢和 HTTP 響應(yīng)!已關(guān)閉評(píng)論442閱讀模式

每個(gè)人都想要一個(gè)速度很快的網(wǎng)站,網(wǎng)站速度越快,用戶停留和點(diǎn)擊頁(yè)面或購(gòu)買產(chǎn)品的時(shí)間就越長(zhǎng),加快網(wǎng)站速度的方法之一是開(kāi)啟緩存,而緩存背后的邏輯就是存儲(chǔ)信息,更具體一點(diǎn)說(shuō),就是找到一個(gè)比連接數(shù)據(jù)庫(kù)更快的存儲(chǔ)信息的地方。

在 WordPress 中,如果一些復(fù)雜的 SQL 查詢或者耗時(shí)的 HTTP 請(qǐng)求,其實(shí)它們的結(jié)果在一定時(shí)間內(nèi)是不變的,那么為了網(wǎng)站速度,如果把這些操作的結(jié)果緩存起來(lái),這樣下次進(jìn)行同樣的 SQL 查詢和 HTTP 請(qǐng)求的時(shí)候,就可以直接從緩存中獲取數(shù)據(jù),從而可以顯著加快網(wǎng)站的速度,當(dāng)然一些復(fù)雜計(jì)算的結(jié)果也可以通過(guò)該方法進(jìn)行緩存。+

那么在 WordPress 中如何快速緩存 SQL 查詢和 HTTP 響應(yīng)呢?這個(gè)時(shí)候就要用到 WordPress 的短時(shí)緩存(Transients)功能。

什么是短時(shí)緩存(Transients)

我們知道 WordPress 緩存有多種類型,比如對(duì)象緩存、瀏覽器緩存、頁(yè)面緩存甚至數(shù)據(jù)庫(kù)緩存,每種類型都有其用途和設(shè)置步驟,比如需要安裝插件和更改服務(wù)器配置以啟用對(duì)象緩存等。

那么今天介紹的 Transients API,是 WordPress 用于在頁(yè)面加載期間臨時(shí)存儲(chǔ) WordPress 中的信息,Transients 本身是“短暫的”或“臨時(shí)的”意思,那么 Transients API 可以理解為臨時(shí)緩存或者短暫緩存的意思,我這里將它翻譯成短時(shí)緩存,它是 WordPress 用來(lái)緩存一些復(fù)雜的 SQL 查詢和運(yùn)算結(jié)果的最簡(jiǎn)單的方法。

它給這些需要緩存的數(shù)據(jù)一個(gè)過(guò)期時(shí)間,并且時(shí)間一到就會(huì)自動(dòng)刪除,所以在制作 WordPress 插件的時(shí)候,需要存儲(chǔ)一些有一定生命周期的數(shù)據(jù)的時(shí)候,Transients API 就是最好的選擇。

簡(jiǎn)單說(shuō),Transients 是一種非常強(qiáng)大的工具,它不僅可以用來(lái)避免對(duì)頁(yè)面內(nèi)容進(jìn)行不必要的數(shù)據(jù)庫(kù)請(qǐng)求,還可以加快生成復(fù)雜標(biāo)記的速度并加快耗時(shí)的第三方 API 請(qǐng)求。

WordPress Transients API 可以與 Redis 緩存完美結(jié)合,顯著提升網(wǎng)站性能。下面是具體的步驟,將 Transients API 與 Redis 緩存結(jié)合使用:

配置 Redis 緩存

  1. 確保 Redis 服務(wù)正在運(yùn)行 確保你的服務(wù)器已經(jīng)安裝并啟動(dòng)了 Redis 服務(wù)。如果沒(méi)有安裝,請(qǐng)先進(jìn)行安裝并啟動(dòng)。
  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. 緩存復(fù)雜查詢或 HTTP 請(qǐng)求

例如,要緩存作者的文章瀏覽量總和:

php
function get_author_views($post_author) {
    // 設(shè)置緩存鍵
    $cache_key = 'author_views_' . $post_author;
    // 嘗試從緩存中獲取結(jié)果
    $cached_views = get_transient($cache_key);

    // 如果緩存中沒(méi)有結(jié)果,執(zhí)行數(shù)據(jù)庫(kù)查詢
    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));

        // 將結(jié)果存儲(chǔ)在緩存中,緩存時(shí)間為 1 小時(shí)
        set_transient($cache_key, $cached_views, HOUR_IN_SECONDS);
    }

    return $cached_views;
}

2. 清理緩存

當(dāng)相關(guān)數(shù)據(jù)更新時(shí),清理緩存:

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 文件中。以下是詳細(xì)步驟:

1. 打開(kāi) functions.php 文件

找到你當(dāng)前使用的主題目錄下的 functions.php 文件。通常這個(gè)文件位于 wp-content/themes/your-theme/functions.php

2. 添加緩存函數(shù)和清理函數(shù)

將以下代碼復(fù)制并粘貼到 functions.php 文件中:

php
// 獲取作者文章瀏覽量總和,并使用短時(shí)緩存
function get_author_views($post_author) {
    // 設(shè)置緩存鍵
    $cache_key = 'author_views_' . $post_author;
    // 嘗試從緩存中獲取結(jié)果
    $cached_views = get_transient($cache_key);

    // 如果緩存中沒(méi)有結(jié)果,執(zhí)行數(shù)據(jù)庫(kù)查詢
    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));

        // 將結(jié)果存儲(chǔ)在緩存中,緩存時(shí)間為 1 小時(shí)
        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. 調(diào)用緩存函數(shù)

在需要獲取作者文章瀏覽量總和的地方,調(diào)用 get_author_views 函數(shù)。例如:

php
// 假設(shè)你在單個(gè)文章頁(yè)面上顯示作者的文章瀏覽量總和
$post_author = get_the_author_meta('ID');
$views = get_author_views($post_author);
echo 'Total views: ' . $views;

將這段代碼添加到你的主題模板文件(例如 single.phpauthor.php)中,適合的地方顯示作者的文章瀏覽量總和。

總結(jié)

通過(guò)將這些代碼添加到 functions.php 文件中,你可以使用 WordPress Transients 來(lái)緩存復(fù)雜的 SQL 查詢結(jié)果,并且在相關(guān)數(shù)據(jù)更新時(shí)清理緩存。

 
  • 本文由 米粒在線 發(fā)表于 2024年12月7日16:28:05
  • 轉(zhuǎn)載請(qǐng)務(wù)必保留本文鏈接:http://m.bjmhhq.com/129247.html
百科知道

徹底解決AMD顯卡win10開(kāi)機(jī)黑屏問(wèn)題

遇上個(gè)AMD R7 350 顯卡 偶爾開(kāi)機(jī)到了logo之后黑屏,找了各種法子沒(méi)解決,看到了這個(gè)辦法。試試看。來(lái)自小櫻看科技的公眾號(hào)。這邊做一下記錄避免丟了。謝謝。小櫻的辦公用電...
網(wǎng)站建設(shè)

寶塔面板設(shè)置Docker加速站提示錯(cuò)誤:全局配置文件有誤,請(qǐng)檢查Expecting value:line 1 column 1(char 0)解決方法

寶塔? docker? 修改加速 報(bào)錯(cuò):寶塔 設(shè)置失敗!讀取配置文件失敗:Expecting value: line 1 column 1 (char 0)解決辦法: 打開(kāi)文件:/etc/d...