コンテンツプリフェッチは、ユーザーがリクエストする前に、エッジキャッシュにコンテンツを事前に読み込みます。これにより、最初のリクエストからキャッシュヒットが保証され、コールドスタートの遅延が解消され、ユーザーエクスペリエンスが向上します。
従来のフロー:
ユーザーリクエスト → キャッシュ MISS → オリジン取得 → キャッシュ保存 → 応答
プリフェッチフロー:
プリフェッチジョブ → オリジン取得 → キャッシュ保存 (準備完了)
ユーザーリクエスト → キャッシュ HIT → 即時応答
| 利点 | 説明 |
|---|---|
| コールドスタートの解消 | 初回訪問者もキャッシュされたコンテンツを取得 |
| ページ読み込みの高速化 | オリジンへの往復遅延なし |
| 予測可能なパフォーマンス | 一貫した応答時間 |
| オリジンの保護 | 負荷を時間帯に分散 |
特定のURLをプリフェッチ:
{
"urls": [
"https://example.com/",
"https://example.com/products",
"https://example.com/about",
"https://example.com/css/styles.css",
"https://example.com/js/app.js"
]
}
最適な用途: 既知の重要なページ、ランディングページ、マーケティングキャンペーン
サイトマップからURLを自動的にプリフェッチ:
サイトマップURL: https://example.com/sitemap.xml
Sudunはサイトマップを解析し、リストされたすべてのURLをプリフェッチします:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/page1</loc>
<lastmod>2024-01-15</lastmod>
</url>
<url>
<loc>https://example.com/page2</loc>
</url>
</urlset>
最適な用途: サイト全体のウォーミング、SEO上重要なページ
リンクされたコンテンツを自動的に発見してプリフェッチ:
{
"start_url": "https://example.com/",
"depth": 2,
"max_urls": 100
}
クローラーはリンクをたどってコンテンツを発見します:
深さ 0: ホームページ
深さ 1: ホームページからリンクされたページ
深さ 2: 深さ1のページからリンクされたページ
最適な用途: 動的サイト、新しいコンテンツの発見
- ソース: URLリスト、サイトマップ、またはクロール
- スケジュール: 1回限りまたは定期的
- オプション: ヘッダー、リージョン、同時実行数
| オプション | 説明 | デフォルト |
|---|---|---|
| リージョン | プリフェッチ先のPoP | すべてのリージョン |
| 同時実行数 | オリジンへの並列リクエスト数 | 5 |
| ヘッダー | プリフェッチリクエスト用のカスタムヘッダー | なし |
| ロボット無視 | robots.txtの制限をスキップ | いいえ |
特定の地理的リージョンにプリフェッチ:
{
"urls": ["https://example.com/"],
"regions": ["us-east", "eu-west", "asia-pacific"]
}
利用可能なリージョン:
| リージョンID | 場所 |
|---|---|
| us-east | 北米東部 |
| us-west | 北米西部 |
| eu-west | 欧州西部 |
| eu-central | 欧州中部 |
| asia-pacific | アジア太平洋 |
| asia-south | 南アジア |
即時または指定時刻にプリフェッチを実行:
{
"schedule": {
"type": "once",
"run_at": "2024-01-15T06:00:00Z"
}
}
自動的に繰り返すプリフェッチを設定:
{
"schedule": {
"type": "recurring",
"interval": "daily",
"time": "04:00",
"timezone": "UTC"
}
}
スケジュールオプション:
| 間隔 | 説明 | 使用例 |
|---|---|---|
| 毎時 | 1時間ごと | 頻繁に更新されるコンテンツ |
| 毎日 | 1日1回 | 標準的なウェブサイト |
| 毎週 | 1週間に1回 | 静的コンテンツ |
| カスタム | Cron式 | 複雑なスケジュール |
高度なスケジューリングの場合:
{
"schedule": {
"type": "cron",
"expression": "0 */6 * * *"
}
}
一般的なパターン:
0 4 * * * - 毎日午前4時0 */2 * * * - 2時間ごと0 0 * * 0 - 毎週日曜日プリフェッチ時に特定のヘッダーを送信:
{
"headers": {
"Accept-Language": "en-US",
"Accept-Encoding": "gzip, br",
"X-Prefetch": "true"
}
}
プリフェッチ用ユーザーエージェントを設定:
{
"user_agent": "Sudun-Prefetch/1.0"
}
ヒント:オリジンサーバーはUser-Agentまたはカスタムヘッダーでプリフェッチリクエストを検出し、別途ログ記録できます。
デプロイ後に自動的にプリフェッチ:
# CI/CD連携
- name: デプロイ
run: deploy-script.sh
- name: キャッシュウォームアップ
run: |
curl -X POST https://api.Sudun.com/v1/domains/example.com/prefetch \
-H "Authorization: Bearer $API_KEY" \
-d '{"sitemap": "https://example.com/sitemap.xml"}'
Webhook経由でプリフェッチをトリガー:
curl -X POST https://api.Sudun.com/v1/domains/example.com/prefetch/trigger \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"job_id": "prefetch-job-123"}'
コンテンツ変更時にプリフェッチ:
{
"trigger": {
"type": "purge",
"action": "prefetch_after_purge"
}
}
プリフェッチジョブの進捗を追跡:
| ステータス | 説明 |
|---|---|
| 保留中 | ジョブがキューイングされました |
| 実行中 | プリフェッチ処理中 |
| 完了 | 全URLのプリフェッチ完了 |
| 失敗 | ジョブ失敗(エラーを確認) |
| 一部完了 | 一部のURLで失敗 |
ダッシュボードでメトリクスを表示:
{
"job_id": "pf-abc123",
"status": "completed",
"started_at": "2024-01-15T04:00:00Z",
"completed_at": "2024-01-15T04:05:32Z",
"stats": {
"total_urls": 150,
"successful": 148,
"failed": 2,
"skipped": 0
}
}
最も重要なページを最初にプリフェッチ:
{
"urls": [
{"url": "https://example.com/", "priority": "high"},
{"url": "https://example.com/products", "priority": "high"},
{"url": "https://example.com/blog", "priority": "medium"},
{"url": "https://example.com/about", "priority": "low"}
]
}
同時実行数を設定してオリジンサーバーへの過負荷を回避:
{
"concurrency": 3,
"rate_limit": "10/秒"
}
トラフィックが最も少ない時間帯にプリフェッチを実行:
ピーク時間帯:9時~18時
プリフェッチ時間帯:2時~5時
プリフェッチすべきでないURLをスキップ:
{
"exclude_patterns": [
"/api/*",
"/admin/*",
"*.json",
"*?session=*"
]
}
プリフェッチでオリジンサーバーが過負荷になる場合:
プリフェッチ後にコンテンツがキャッシュされない場合:
curl -X POST https://api.Sudun.com/v1/domains/example.com/prefetch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://example.com/",
"https://example.com/products"
],
"regions": ["us-east", "eu-west"],
"concurrency": 5
}'
curl -X POST https://api.Sudun.com/v1/domains/example.com/prefetch \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"sitemap": "https://example.com/sitemap.xml",
"schedule": {
"type": "daily",
"time": "04:00"
}
}'
curl -X GET https://api.Sudun.com/v1/domains/example.com/prefetch/job-123 \
-H "Authorization: Bearer YOUR_API_KEY"
コンテンツプリフェッチについてお困りですか? support@Sudun.com までお問い合わせください