Sveltekitのキャッシュデータ
私の以前の投稿は、Sveltekitの機能の一般的な概要を提供しました。この投稿は、Web開発の重要な側面を掘り下げています:キャッシュ。 まだおかしい場合は、コンテキストについては以前の投稿をお読みください。完全なコードとライブデモはGitHubで利用できます。
この投稿は、効率的なデータ処理に焦点を当てています。ページのクエリ文字列(Sveltekitの組み込み機能を使用)を変更し、ページのローダーを再登録する基本的な検索機能を実装します。データベースを繰り返しクエリする代わりに、キャッシュを活用して、以前に検索したデータをすばやく取得します。キャッシュの有効期限を管理するための手法と、批判的に手動のキャッシュの無効化を検討します。 最後に、キャッシュをクリアしながら、突然変異の後にクライアント側を更新する方法を示します。これは通常よりも高度なトピックです。外部依存関係に依存することなく、
などのライブラリにあるものと同様の機能を実装します。 WebプラットフォームAPIとSvelteKit機能のみを使用しますWebプラットフォームの機能は低レベルであり、より手動での努力が必要ですが、外部ライブラリがないため、利点はバンドルサイズを縮小します。 ただし、絶対に必要な場合にのみこれらの手法を使用してください。react-query
キャッシングは複雑で、簡単に管理される可能性があります。 データストアとUIが十分にパフォーマンスがある場合は、Sveltekitを直接処理してください。シンプルさが重要です。この投稿は、それがもはや十分ではないときの解決策を提供します。
にはサポートがあります!手動キャッシュが頻繁に必要な場合は、このライブラリの探索を検討してください。
セットアップ
ローダーからAPIルートに移動しましょう。 から )に変更します。これにより、サーバーとクライアントの両方で実行されるユニバーサルローダーになります。 クライアント側のフェッチは、ブラウザのネイティブ ここで、検索用語を入力すると、URLのクエリ文字列が更新され、ローダーがトリガーされ、To Doアイテムが検索されます。
基本的なキャッシュ エンドポイントにキャッシングを追加しましょう: このキャッシュAPIは60秒間呼び出します。必要に応じてこの値を調整します。より洗練されたキャッシング戦略については、 さて、60秒のウィンドウ内の後続の検索は、キャッシュから即座にロードされます。 ブラウザの開発者ツールでキャッシュを無効にして、キャッシュ動作を観察することを忘れないでください。
ヘッダーを観察し、指定された時間枠内でキャッシュデータを使用します。 クライアント側の検索では、ブラウザのキャッシュが使用され、ページリロード後も持続する可能性があります(キャッシュバストの実装に応じて)。
ファイルを作成します:
キャッシュ値の送信 キャッシュをつぶします 必要なプリミティブをカバーしました。それでは、それらを統合しましょう。 編集機能を に 編集後、更新されたデータを取得するためのフェッチ。
を使用してください: すぐに更新するためのコードはGithubにあります。
リロードボタンのコードはgithubにあります。 この投稿では、Sveltekitの高度なキャッシュ技術を調査しました。 必要に応じてこれらを使用することを忘れないでください。 パフォーマンスが問題になった場合にのみ、クリーンでシンプルなコードを優先し、最適化します。 目標は、最適化が本当に必要なときのツールを提供することでした。react-query
ファイルを作成して
次に、ページローダーの名前を page.server.js
関数を使用します。
server.js
routes/api/todos
簡単な検索フォームをimport { json } from "@sveltejs/kit";
import { getTodos } from "$lib/data/todoData";
export async function GET({ url, setHeaders, request }) {
const search = url.searchParams.get("search") || "";
setHeaders({ "cache-control": "max-age=60" }); // Add caching header
const todos = await getTodos(search);
return json(todos);
}
page.server.js
最後に、キャッシングの動作を簡単に観察するために page.js
の遅延を増やしてください:.ts
fetch
export async function load({ fetch, url, setHeaders }) {
const search = url.searchParams.get("search") || "";
const resp = await fetch(`/api/todos?search=${encodeURIComponent(search)}`);
const todos = await resp.json();
return { todos };
}
/list
<div>
<label for="search">Search:</label>
<input type="text" id="search" bind:value="{searchQuery}" on:keypress="{(e)"> { if (e.key === 'Enter') { navigate(`/list?search=${encodeURIComponent(searchQuery)}`) } }}>
</div>
import { json } from "@sveltejs/kit";
import { getTodos } from "$lib/data/todoData";
export async function GET({ url, setHeaders, request }) {
const search = url.searchParams.get("search") || "";
setHeaders({ "cache-control": "max-age=60" }); // Add caching header
const todos = await getTodos(search);
return json(todos);
}
stale-while-revalidate
を検討してください。
最初のサーバーレンダリングロードがサーバー上にフェッチされ、クライアントに送信されます。 SveltekitはCache-Control
キャッシュ無効キャッシュを手動で無効にするには、URLにクエリバスト値を追加します。この値は、サーバーに設定できるが、クライアントで読みやすいCookieに保存します。
ルートフォルダーのルートで layout.server.js
これにより、最初のリクエストでCookieを設定し、その後のリクエストで読み取ります。 export async function load({ fetch, url, setHeaders }) {
const search = url.searchParams.get("search") || "";
const resp = await fetch(`/api/todos?search=${encodeURIComponent(search)}`);
const todos = await resp.json();
return { todos };
}
httpOnly: false
私たちのユニバーサルローダーは、実行環境に関係なく、このキャッシュ値を読み取る必要があります。 クライアントについては、を解析します
document.cookie
<div>
<label for="search">Search:</label>
<input type="text" id="search" bind:value="{searchQuery}" on:keypress="{(e)"> { if (e.key === 'Enter') { navigate(`/list?search=${encodeURIComponent(searchQuery)}`) } }}>
</div>
に送信します
/api/todos
export const wait = async (amount) => new Promise((res) => setTimeout(res, amount ?? 500));
実装
setHeaders({ "cache-control": "max-age=60" });
フォルダー:/list
ファイルを作成します
export function load({ cookies, isDataRequest }) {
const initialRequest = !isDataRequest;
const cacheValue = initialRequest ? +new Date() : cookies.get("todos-cache");
if (initialRequest) {
cookies.set("todos-cache", cacheValue, { path: "/", httpOnly: false });
}
return { todosCacheBust: cacheValue };
}
page.server.js
即時の更新/list
export function getCookieLookup() {
if (typeof document !== "object") {
return {};
}
return document.cookie.split("; ").reduce((lookup, v) => {
const parts = v.split("=");
lookup[parts[0]] = parts[1];
return lookup;
}, {});
}
export const getCurrentCookieValue = (name) => {
const cookies = getCookieLookup();
return cookies[name] ?? "";
};
/todos
。 次に、ストアを直接更新してください:
これにより、再レンダーをトリガーすることなくストアを更新します。 キャッシュがクリアされ、変更がすぐに表示されます
import { getCurrentCookieValue } from "$lib/util/cookieUtils";
export async function load({ fetch, parent, url, setHeaders }) {
const parentData = await parent();
const cacheBust = getCurrentCookieValue("todos-cache") || parentData.todosCacheBust;
const search = url.searchParams.get("search") || "";
const resp = await fetch(`/api/todos?search=${encodeURIComponent(search)}&cache=${cacheBust}`);
const todos = await resp.json();
return { todos };
}
$todos
キャッシュをクリアして現在のクエリをリロードするリロードボタンを追加しましょう。 サーバーのアクションを追加:{#each $todos as t}
cookies.set("todos-cache", +new Date(), { path: "/", httpOnly: false });
これにより、
を使用してリロードされたものを制御し、不必要な再レンダーを防ぎます。 ローダーを更新します:
import { json } from "@sveltejs/kit";
import { getTodos } from "$lib/data/todoData";
export async function GET({ url, setHeaders, request }) {
const search = url.searchParams.get("search") || "";
setHeaders({ "cache-control": "max-age=60" }); // Add caching header
const todos = await getTodos(search);
return json(todos);
}
結論
以上がSveltekitのキャッシュデータの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











それは&#039; Vueチームにそれを成し遂げてくれておめでとうございます。それは大規模な努力であり、長い時間がかかったことを知っています。すべての新しいドキュメントも同様です。

私はこの非常に正当な質問で誰かに書いてもらいました。 Leaは、ブラウザから有効なCSSプロパティ自体を取得する方法についてブログを書いています。それはこのようなものです。

先日、Corey Ginnivanのウェブサイトから、この特に素敵なビットを見つけました。そこでは、スクロール中にカードのコレクションが互いに積み重ねられていました。

WordPressエディターでユーザーに直接ドキュメントを表示する必要がある場合、それを行うための最良の方法は何ですか?

これらのデスクトップアプリがいくつかあり、目標があなたのサイトをさまざまな次元ですべて同時に表示しています。たとえば、書くことができます

CSS Gridは、レイアウトをこれまで以上に簡単にするように設計されたプロパティのコレクションです。何でもするように、少し学習曲線がありますが、グリッドは

Google Fontsが新しいデザイン(ツイート)を展開したようです。最後の大きな再設計と比較して、これははるかに反復的です。違いをほとんど伝えることができません
