私の以前の投稿は、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>
endpoint:に送信します
/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 };
}
これにより、フォームの送信を処理し、to-doアイテムを更新し、キャッシュをクリアします。
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 サイトの他の関連記事を参照してください。

ライブトークやクラス中にインタラクティブなアニメーションを表示しなければならなかった場合、スライドと対話するのが必ずしも簡単ではないことを知っているかもしれません

Astroを使用すると、ビルド中にほとんどのサイトを生成できますが、fuse.jsのようなものを使用して検索機能を処理できるサーバー側のコードが少しあります。このデモでは、ヒューズを使用して、個人の「ブックマーク」セットを検索します。

ドキュメントが保存されている間にGoogleドキュメントに表示されるものと同様に、プロジェクトの1つに通知メッセージを実装したかったのです。言い換えれば、a

サイエンスフィクションの初期の頃から、私たちは私たちに話しかける機械について空想してきました。今日は当たり前です。それでも、作成のための技術

私はその日私たちにワードキャンプにいたので、グーテンバーグがコアにリリースされたときのことを覚えています。数ヶ月が今から経過しているので、ますます私たちのことを想像してください

ほとんどのWebアプリケーションの背後にあるアイデアは、データベースからデータを取得し、可能な限り最良の方法でユーザーに提示することです。そこでデータを扱うとき

&#039;は、理にかなっていると思われることを非常に実行できる状況を少し段階的に実行しますが、CSSのトリックでそれを成し遂げることができます。これで


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
