Fastify と Redis Cache を使用して Web サイトを高速化する

WBOY
リリース: 2024-08-26 21:46:32
オリジナル
218 人が閲覧しました

Speeding Up Your Website Using Fastify and Redis Cache

24 時間も前に、Cloudflare キャッシュを使用してウェブサイトを高速化する方法についての投稿を書きました。ただし、その後、ロジックの大部分を Redis を使用する Fastify ミドルウェアに移行しました。その理由と、自分で行う方法は次のとおりです。

Cloudflareのキャッシュの問題

Cloudflareキャッシュに関して2つの問題に遭遇しました:

  • 応答のキャッシュを有効にするとページ ナビゲーションが壊れました。この件については少し前に Remix フォーラムで問題を提起しましたが、これを書いている時点ではまだ未解決です。応答のキャッシュによってページ ナビゲーションが中断される理由は明らかではありませんが、応答が Cloudflare によってキャッシュされている場合にのみ発生します。
  • 元の投稿で説明されているように、再検証中に古いコンテンツを提供するように Cloudflare を実行させることができませんでした。利用できる機能ではないようです。
他にもいくつか問題が発生しましたが (パターン マッチングを使用してキャッシュをパージできないなど)、それらは私のユースケースにとって重要ではありませんでした。

そこで、Redis を使用してロジックを Fastify ミドルウェアに移動することにしました。

[!NOTE]

画像キャッシュのためにCloudflareキャッシュを残しました。この場合、Cloudflare キャッシュは効果的に CDN として機能します。

Fastify ミドルウェア

以下は、Fastify を使用して応答をキャッシュするために私が作成したミドルウェアの注釈付きバージョンです。


リーリー

コメントでコードを詳しく説明しますが、重要なポイントがいくつかあります:

    キャッシュ基準:
    • リクエスト:
    • 認証されたユーザーの応答をキャッシュしないでください。
    • GET リクエストのみをキャッシュします。
    • 「/supplements/」を含む URL の応答のみをキャッシュします。
    • リクエストヘッダーにcache-control: no-cacheが含まれている場合はキャッシュをバイパスします。
    • 回答:
    • 成功した応答のみをキャッシュします (statusCode は 200)。
    • すでにキャッシュから提供されている応答をキャッシュしないでください (x-pillser-cache: HIT)。
    • content-type: text/html の応答のみをキャッシュします。
  • キャッシュキーの生成:
    • リクエストメソッド、URL、ビューポート幅を含むJSON表現のSHA-256ハッシュを使用します。
    • 名前空間の設定と削除を容易にするために、キャッシュ キーの先頭に「request:」を付けます。
  • リクエストの処理:
    • onRequest ライフサイクルにフックして、リクエストにキャッシュされた応答があるかどうかを確認します。
    • 利用可能な場合はキャッシュされた応答を提供し、x-pillser-cache: HIT でマークします。
    • キャッシュされた応答を送信した後にバックグラウンド タスクを開始してキャッシュを更新し、「再検証中に古いコンテンツを提供する」を実装します。
  • 応答処理:
    • onSend ライフサイクルに接続して、応答を処理してキャッシュします。
    • キャッシュを簡素化するために、読み取り可能なストリームを文字列に変換します。
    • 特定のヘッダー (content-length、set-cookie、x-pillser-cache) をキャッシュから除外します。
    • キャッシュ不可能な応答を x-pillser-cache: DYNAMIC としてマークします。
    • 1 日の TTL (Time To Live) で応答をキャッシュし、x-pillser-cache: MISS で新しいエントリをマークします。
結果

いくつかの場所からレイテンシ テストを実行し、各 URL の最も遅い応答時間を取得しました。結果は以下の通りです:

URL 国 オリジンの応答時間 Cloudflareのキャッシュされた応答時間 キャッシュされた応答時間を短縮する https://pillser.com/vitamins/vitamin-b1 us-west1 240ミリ秒 16ミリ秒 40ミリ秒 https://pillser.com/vitamins/vitamin-b1 ヨーロッパ西3 320ミリ秒 10ミリ秒 110ミリ秒 https://pillser.com/vitamins/vitamin-b1 オーストラリア-南東1 362ミリ秒 16ミリ秒 192ミリ秒 https://pillser.com/supplements/vitamin-b1-3254 us-west1 280ミリ秒 10ミリ秒 38ミリ秒 https://pillser.com/supplements/vitamin-b1-3254 ヨーロッパ西3 340ミリ秒 12ミリ秒 141ミリ秒 https://pillser.com/supplements/vitamin-b1-3254 オーストラリア-南東1 362ミリ秒 14ミリ秒 183ミリ秒
Cloudflareキャッシュと比較すると、Fastifyキャッシュは遅いです。これは、Cloudflare キャッシュが地域のエッジロケーションから提供されるのに対し、キャッシュされたコンテンツは引き続きオリジンから提供されるためです。ただし、優れたユーザー エクスペリエンスを実現するには、これらの応答時間で十分であることがわかりました。

以上がFastify と Redis Cache を使用して Web サイトを高速化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!