WordPress の Transient に関するガイド

公開: 2023-02-12

WordPress 開発者として、Web サイトの成功にとってパフォーマンスがいかに重要であるかをすでにご存知でしょう。 ただし、WordPress のトランジェントと、それがプロジェクトの最適化にどのように役立つかを理解することは、少し難しい場合があります。

幸いなことに、それらを分解すると、トランジェントを理解するのはそれほど難しくありません。 いくつかの重要なガイドラインを念頭に置いている限り、それらを次の WordPress プラグインに組み込む準備が整っているはずです.

この記事では、WordPress トランジェントとは何か、いつどのように使用するかについて概要を説明します。 カバーする地面がたくさんあるので、すぐに始めましょう!

目次
1. WordPress トランジエントとは?
2. WordPress サイトでトランジエントを使用する利点
3. WordPress サイトでトランジエントを使用することの欠点
4. WordPress トランジエントを使用する場合
5. WordPress トランジェントの管理
6.トランジェントで使用される基本操作
6.1. 1. トランジェントの設定
6.2. 2. トランジェントの取得
6.3. 3.トランジェントの削除
7.一時的な期限切れ: どのように機能しますか?
8. WordPress トランジェント API を理解する
8.1. Transients API バックエンドの最も一般的な 2 つの実装:
9.開発にトランジエントを適用する
10. WordPress サイトをもっと活用する

WordPress トランジエントとは?

トランジェントを理解するには、キャッシングとアプリケーション プログラミング インターフェイス (API) に関する基本的な知識が役立ちます。

ウェブページのデータをキャッシュすることは基本的に、ウェブサイトのデータを一時的に保存する方法です。これにより、同じデータに対して複数のリクエストがあった場合に、サイトで MySQL や PHP を再実行する必要がなくなります。 これにより、数秒の時間を節約し、サーバーの負荷を軽減できます。

データを一時的に保持するという考えから、「一時的」という言葉が使われています。 Transients API は WordPress Options API に似ています。 データに名前と値 (複数レベルの PHP 配列のように複雑な場合があります) を指定すると、データが格納されます。 後で、おそらく別のリクエストでも、名前を使用してそのデータを取得できます。 違いは、オプション テーブルのデータが永久に保持されることです。 つまり、データを保存でき、3 年後もそのデータは存在し続けます。

すべてのトランジェントは、次の 3 つの部分で構成されています。

  • $transient. これは、トランジェントを識別して呼び出すために使用される文字列です。 トランジェントの「キー」または「名前」とも呼ばれます。
  • $値。 これは、API を介して取得される情報です。 トランジェントの値は、オブジェクト、配列、数値、または文字列にすることができます。
  • $有効期限。 これは、トランジェントが削除され、API を介して必要な情報に再びアクセスする必要が生じる前に、トランジェントがデータベースにとどまる時間です。

表面的には、WordPress トランジェントについてはこれですべてです。 ただし、それらを適切に使用するには、さらに知っておく必要があります。

ただし、一時的なデータは残りません。 それがポイントです! データを要求し、2 つの方法のいずれかでデータが欠落していることを確認できます。 まず、データを保存するときに、有効期限を指定します。 たとえば、「これを 3 時間保管してください」と言うことができます。 そのため、4 時間後に要求すると、欠落します。

2 番目の方法は、データの一部が、いつでも、何らかの理由で単純に消失することを許可することです。 それは奇妙に聞こえますね! 信頼できない場合、データを保存する意味はありますか? 要点は、ストレージは WordPress が尊重しようとする要求ですが、この柔軟性により、一時的なストレージにさまざまな種類の実装を使用することが可能です。つまり、さまざまな高度なテクノロジーを使用して一時的なものを非常に効率的にすることが可能です。 、マルチサーバー クラスタ環境でも適切に動作します。

この「いつでも消える」ことから、一般的にキャッシュにはトランジェントを使用します。 つまり、低速の MySQL クエリや、誰かの Twitter や RSS フィードなどの外部ソースからデータを取得するなど、リアルタイムで処理を行う必要がある場合は、計算されたデータを一時的に保存できます。それを再現することは常に可能です。 しかし、通常の場合 (欠落していない場合) は、再計算する必要なくすぐにデータを取得できます。

WordPress サイトでトランジエントを使用する利点

前述したように、トランジェントの主な利点は、Web サイトのパフォーマンスが向上することです。 例として Google Site Kit プラグインを使用して、そのしくみの大まかな概要を次に示します。

プラグインが有効になると、API を使用して、Analytics や Search Console などのプラットフォームからのデータを WordPress ダッシュボードに表示します。 トランジェントがなければ、WordPress は Site Kit ダッシュボードを表示するたびに各ツールからこの情報を取得する必要があります。

代わりに、Site Kit には、Analytics と Search Console からのデータをキャッシュするトランジェントが含まれています。 それらは 1 日 (プラットフォームがデータを返さない場合は 1 時間) 保存されます。

その後、Site Kit ダッシュボードにアクセスするたびに、WordPress は、API を再度呼び出す必要なく、データベースから保存された情報をすばやく取得できます。 有効期限が切れると、古いデータは削除されます。

これは、毎回結果が読み込まれるのを待つ必要がないことを意味します。 これは、投稿のソーシャル メディア共有数の表示やニュースフィードの表示など、さまざまな状況で役立ちます。

WordPress サイトでトランジエントを使用することの欠点

トランジエントで問題が発生するのは、プラグイン/テーマが異なるトランジェントの実装で実行されたときに発生する、異なる、再現が難しい動作です。 トランジェントの実装が異なるということは、特定のタイプのサイトの特定の構成でのみ問題が発生し、他のサイトでは決して問題が発生しないことを意味します。 開発者として、この落とし穴を認識せず、それに応じてコーディングしていない場合、コードは健全であると考えるでしょうが、実際には現場で壊れてしまい、それを再現する方法さえわかりません。 !

WordPress トランジェントを使用する場合

トランジェントは、有効期限が切れるとデータベースから削除されます。 そのため、継続的に再作成される情報にのみ使用する必要があります。

さらに、トランジェントはプロジェクトのパフォーマンスを向上させることができますが、大規模なクエリとリモート呼び出し用に予約するのが最適です。 リソースが必要になるたびに新しいリクエストを作成するよりも、トランジェントを作成するためにより多くのコードが必要になる場合は、使用しない方がよいでしょう。

WordPress トランジェントの管理

WordPress サイトで現在動作しているトランジェントを簡単に確認して管理したい場合は、Transients Manager プラグインをインストールできます。

[ツール] > [トランジェント]に移動すると、トランジェントの完全なリストが表示されます。

ここでは、前にリストした 3 つの一時的な要素 (キー (名前)、値、および有効期限) をすべて確認できます。 [編集]リンクをクリックすると、これらの機能を編集できます。

トランジェントを個別に、またはまとめて削除することもできます。

トランジェントで使用される基本操作

独自のトランジェントをコーディングする場合、使用する必要がある可能性が高い 3 つの基本的な操作があります。 例として Site Kit を引き続き使用し、以下にそれぞれの概要を示します。

1. トランジェントの設定

トランジェントの作成または「設定」は、キー、値、および有効期間を定義し、その情報を関連データに適用するプロセスです。 これを行うには、次の形式を使用します。

 Set_transient ('key', $value, expiration_period)

Google Site Kit で使用されるコードは、分析データを保存する一時的なものを設定するために使用されます:

 // Cache "data found" status for one day, "no data" status for one hour. set_transient( $transient_key, (int) $has_data, $has_data ? DAY_IN_SECONDS : HOUR_IN_SECONDS ); } return (bool) $has_data; } }

一時キーはgooglesitekit_analytics_has_data (コードの前半で定義) で、値は$has_dataまたは$has_data ? 、有効期限は 1 日または 1 時間です (値によって異なります)。

2. トランジェントの取得

トランジェントの取得はもう少し複雑です。 まず、関数を使用して必要なデータを要求する必要があります。 次に、新しい API リクエストを作成する代わりに、ロードする必要がある対応するトランジェントがあるかどうかを確認します。

結果は次のようになります。

 function some_function(){ $transient = get_transient('key');

次に、トランジェントを返すか、期限切れのデータを削除して、ソースへの新しい呼び出しを行う必要があります。 最後に、新しいデータを返した後にトランジェントを設定する必要があります。これにより、有効期限が切れるまで再び保存されます。

Google Site Kit では、次のようになります。

 /** * Checks whether Analytics data exists for the given URL. * * @since 1.4.0 * * @param string $url The url to check data for. * @return bool */ protected function has_data_for_url( $url ) { if ( ! $url ) { return false; } $transient_key = 'googlesitekit_analytics_has_data_' . md5( $url ); $has_data = get_transient( $transient_key ); if ( false === $has_data ) { /* @var Google_Service_AnalyticsReporting_Report[]|WP_Error $reports Array of reporting report instances. */ $reports = $this->get_data( 'report', array( 'url' => $url, 'metrics' => array( array( 'expression' => 'ga:users' ), array( 'expression' => 'ga:sessions' ), ), ) ); if ( is_wp_error( $reports ) ) { $reports = array(); // Bypass data check and cache. } foreach ( $reports as $report ) { /* @var Google_Service_AnalyticsReporting_Report $report Report instance. */ $report_data = $report->getData(); /* @var Google_Service_AnalyticsReporting_ReportData $report_data Report data instance. */ foreach ( $report_data->getTotals() as $date_range_values ) { /* @var Google_Service_AnalyticsReporting_DateRangeValues $date_range_values Values instance. */ if ( isset( $date_range_values[0], $date_range_values[1] ) && ( 0 < $date_range_values[0] || 0 < $date_range_values[1] ) ) { $has_data = true; break 2; } } }

このコードの後に​​、前のセクションでトランジェントを設定するために含めたスニペットを続ける必要があります。

3.トランジェントの削除

場合によっては、トランジェントを削除したいことがあります。 たとえば、Google Site Kit で常に最新の分析を表示したい場合は、データをキャッシュしない方がよいでしょう (ただし、Site Kit のトランジェントを実際に削除することはお勧めしません)。

そうしないと、新しい訪問者がいたとしても、プラグインは 1 日を通して同じ結果を表示します。 トランジェントは 24 時間続くため、午後に表示されるデータは、午前中にロードしたデータのキャッシュ バージョンにすぎません。

トランジェントを削除する最も簡単な方法は、Transients Manager プラグインを使用することです。 ただし、代わりにコードを使用する場合は、 delete_transient()関数を使用できます。 必要なのは一時キーだけです。

 delete_transient('key');

ただし、削除するトランジェントごとにこれを繰り返す必要があります。

一時的な期限切れ: どのように機能しますか?

一時的な有効期限は、いくつかの異なる方法で表すことができます。 最も単純な 2 つのオプションは次のとおりです。

  • 秒単位 ( set_transient('key', $value, 86400))
  • WordPress 時定数の使用 ( set_transient('key', $value, DAY_IN_SECONDS))

または、無期限のトランジェントを設定することもできます。 これは、キャッシュされた情報を手動で削除してリセットするまで、一時的なデータを同じに保ちたい場合に役立ちます。

無期限のトランジェントを作成するのは非常に簡単です。 set_transient関数の有効期限パラメーターを空白のままにするか、ゼロとして識別します。

WordPress トランジェント API を理解する

WordPress Transients API は、サイトのデータベースに情報をキャッシュするための単なる手段です。 これにより、トランジェントの設定、取得、削除など、この投稿全体で説明したすべての関連操作が可能になります。

つまり、Transients API は WordPress のコアの一部であり、Transients を使用できるようにするものです。

Transients API バックエンドの最も一般的な 2 つの実装:

  1. WordPress に組み込まれているため、これまでで最も一般的なものです。 一時的な値は、通常のオプションと同様に wp_options テーブルに保存されます。 トランジェントでは、有効期限を保持するために追加のオプションが保存されます。 トランジェントがアクセスされると、WordPress は最初に有効期限を取得します。 有効期限が切れている場合、WordPress はテーブルから両方のオプションを削除し、それによってデータを「クリーンアップ」し、データが存在しなかったふりをします。 有効期限が切れていない場合は、オプション テーブルからコンテンツを取得します。
  2. Memcached。 Memcached は非常にシンプルですが、効率的で信頼性の高いサーバー側ソフトウェアであり、Transients API が行うべきことを正確に実行するように設計されています。キーに基づいてデータを保存します。キーは特定の時間に期限切れになり、必要に応じていつでも消える可能性があります。に。

WordPress Transients の代わりに memcached を使用すると、2 つの特別な利点が得られます。そのため、ここ WP Engine で自動的に事前構成されます。 私たちはあなたの背中を持っています

私。 Memcached は、WordPress Transients よりも値の保存と取得が 10 倍から 100 倍高速です。これは、Transients のポイントがデータをキャッシュしてサイトの速度を上げることであるため、特に興味深いことです。

ii. Memcached は、データで占有する最大容量を設定します (例: 64MB の RAM)。つまり、サイトが一度に大量のデータを保存すると、古いデータが自動的に破棄されるため、容量が不足することはありません。 しかし、組み込みの WordPress Transients はオプション テーブルに任意の量のデータを保存します。

開発にトランジエントを適用する

同じ Transients キーを繰り返し読み書きしていると仮定し、それが 1k のデータであるとします。 その場合、Memcached と WordPress Transients の両方が期待通りの動作を行い、両方とも (オプション テーブルまたは memcached のいずれかで) 約 1k のスペースを占有します。

ここで、ブラウザー セッションごとに異なる、異なる Transients キーを読み書きしているとします。 つまり、Transients にユーザー セッション データを格納している場合はどうなるでしょうか。 これは表面的には理にかなっています。 セッション データは永遠に続くべきではなく、特別なデータベース テーブルに煩わされたくありません。 それに加えて、多くの WordPress ホスティング会社は PHP セッションを許可していないため、これは次善の策です。 さらに高速でマルチサーバーです。

ここに違いが現れます。 Memcached を使用し、トラフィックの少ないサイトでは、この方法が機能しているように見えます。 値はしばらく持続し、有効期限が切れると削除されます。 ただし、サーバーの負荷が高い場合、サーバーが保存する必要があるセッション データの量が memcached で使用可能なスペースを超えるため、思ったよりも早くセッション データが失われ始めます。 そして、この正確に負荷の高い環境でテストしなければ、それを知ることはできません. 一般に、これらの環境では memcached がすぐにいっぱいになってしまうため、実際に memcached は無効になっています。 事実上、Transient API キャッシュはまったくありません!

しかし、WordPress トランジエントを使用すると、異なる動作になりますが、依然として非常に望ましくない動作になります。 値は固定サイズの RAM ブロックではなく、データベースに書き込まれるため、値はすべて保持されます。 つまり、負荷の高いサイトであっても、セッション データは残っています。 素晴らしい!

またはそう思った。 セッションのような一意のキーを使用したときに何が起こるかは、Transient API で述べられていないためです。 組み込みメソッドで何が起こるかというと、オプション テーブルが無限にいっぱいになるということです! 理由: WordPress の「古いデータのクリーンアップ」は、キーを要求した場合にのみ機能します (前述のとおり)。 キーをそのままにしておくと、オプション テーブルに永久に残ります。 これらをクリーンアップする別のプロセスはありません。

私たちはこの問題を認識しているだけでなく、これを理解していないコードを実行している可能性のあるお客様を支援したいと考えています. そこで、マネージド WordPress の「マネージド」の出番です! 毎晩、期限切れのトランジェントがないかオプション テーブルを調べて、それらを削除する自動化されたプロセスがあります (データと有効期限アイテムの両方)。 ブーム! それらはなくなりました。心配する必要はありません。

これを行うのは素晴らしいことですが、一般的なプラグインまたはテーマの開発者として、あらゆるホスティング環境で適切に動作することになっているため、プラグインまたはテーマが展開される可能性のあるすべての環境でこれを行うことはできません。可能な限り最適化されたコードをユーザーと顧客に確実に提供したいと考えています。

ただし、Transient がどのようにうまくいかないかがわかったので、コードをより効率的にする方法を見てみるのは素晴らしいアイデアかもしれません。 ここまで読んだあなたは、コードを最適化するのが好きなのかもしれません。このブログ投稿は、あなたに試練を与え、よりスケーラブルにするためにいくつかのことを書き直す動機を与えるかもしれません!

WordPress サイトをさらに活用する

WordPress 開発者として、高速なパフォーマンスを維持しながら、エンド ユーザーにリモート データへのアクセスを提供することが重要です。 WordPress トランジェントはまさにそれを達成するのに役立ちます。

ただし、非常に高速な WordPress ホスティングとプロの開発者リソースから少し余分な助けを得ても問題はありません。 コーディングが初めての方でも、ベテランのプロでも、いつでもお手伝いします。 今日の私たちの計画をチェックしてください!