ガイドAPIリファレンス
ガイド

マップ タイル キャッシュのベスト プラクティス

キャッシュでは、サーバーに同じリソースを繰り返しリクエストすることを回避するために、マップのコピーをクライアント デバイス上でローカルに保存します。このプロセスにより、ネットワーク トラフィックが大幅に削減され、アプリケーション内でのマップのレンダリングが高速化されます。

次のセクションでは、最適な効率を実現するためのキャッシュとリクエスト/response処理を設定するベスト プラクティスについて説明します。

キャッシュの仕組みを理解する

最も一般的なキャッシュ方法は、デフォルトのブラウザー キャッシュを使用することです。これはキャッシュ管理に標準の HTTP ヘッダーを使用する、ほとんどのユースケースに十分なシンプルな方法です。

ウェブ ブラウザーでベクター タイルをキャッシュするには、ブラウザーがタイルを初めて読み込んだ後にタイルを保存します。ユーザーがマップを操作すると、ブラウザーはサーバーにタイルをリクエストする前に、必要なタイルがキャッシュにあるかどうかを確認します。リクエストされたタイルがキャッシュされていてまだ有効な場合、ブラウザーはタイルをキャッシュから直接読み込み、待ち時間とサーバー負荷を軽減します。

これにより、タイル リクエストの数が減り、マップのレンダリングが高速化されて、ユーザー エクスペリエンスが向上します。ブラウザー ベースのキャッシュは、追加の設定なしに最新ブラウザーのすべてで一貫して動作しますが、通常、ブラウザー内でキャッシュの動作を直接変更することはできません。ただし、サーバー側で Cache-ControlETag などの HTTP ヘッダーを設定することにより、ブラウザーがベクター タイルなどのリソースをどのように、どのくらいの期間キャッシュするかを制御することはできます。

キャッシュ設定のベスト プラクティス

キャッシュ メカニズムを効率的に設定するためのベスト プラクティスを以下に示します。

  • 主にタイル キーに基づいてキャッシュする:キャッシュは一意の識別子 (タイル キー) に基づいてタイルを保存し、style やその他のタイル パラメーターなどの追加要素を考慮できる柔軟性を備えている必要があります。

  • キャッシュの検証に ETag を使用する:各サーバー レスポンスには、リクエストされたタイルがまだ有効であるか、再生成する必要があるかを判断するための ETag ヘッダー フィールドが含まれています。次のスニペットは、レスポンス ヘッダーから取得できる ETag のサンプルを提供します。

    Etag: W/"1adc8-95377349-ef4a79f943364b44744012b5in189jp9fdtm10"
  • キャッシュ エントリーの有効期限を設定する:キャッシュされた各タイルに、有効期限が切れるまでの制限時間を割り当てます。この制限時間は、タイルを受信した時刻に、事前に決定された最大期間を加算して計算します。HERE は最大限の効率を実現するために、最大キャッシュ期間を 86400 秒 (24 時間) に設定することを推奨しています。

  • コンテンツ キャッシュに関する HERE の制限事項に準拠する:たとえば、ロケーション アセットのリポジトリを構築したり、複数のエンド ユーザーにサービスを提供するために 1 つのリクエストをスケーリングしたりする目的で、ロケーション データをキャッシュまたは保存することは禁止されています。詳細については、「HERE Developer 利用規約」を参照してください。

リクエストの処理と最適化

以下は、タイルをリクエストするためのベスト プラクティスです。タイルがサーバーから初めてリクエストされる場合と、クライアントのキャッシュから取得される場合の両方のシナリオを考慮しています。これらのプラクティスは、キャッシュのヒットとミスを効果的に処理することにより、タイル管理を最適化し、ユーザー エクスペリエンスを向上します。

  • タイルを初めてリクエストする際には、サーバーへの初期リクエストに ETag ヘッダーを送信せず、単にタイルを取得してください。

  • サーバーからタイルを受信したら、タイル自体とサーバー レスポンスで提供される ETag 値の両方を保存します。さらに、このキャッシュ エントリーの有効期限を、現在の時刻にキャッシュに許可されている最大期間 (例:推奨される 86400 秒) を加えた時間に設定します。

    https://vector.hereapi.com/v2/vectortiles/base/mc/12/2200/1343/omv?apiKey={YOUR_API_KEY}
    ETag: W/"1adc8-95377349-ef4a79f943364b44744012b5in189jp9fdtm10"
    Cache-Control: max-age=86400
  • キャッシュされたタイルの有効期限が切れている場合は、次のスニペットに示すように、キャッシュされた ETag 値を If-None-Match ヘッダーの一部として含めて、サーバーにタイル リクエストを送信します。

    https://vector.hereapi.com/v2/vectortiles/base/mc/12/2200/1343/omv?apiKey={YOUR_API_KEY}
    If-None-Match: W/"1adc8-95377349-ef4a79f943364b44744012b5in189jp9fdtm10"
  • キャッシュされたタイルが変更されている場合、サーバーは 200 OK メッセージと、更新された ETag 値を含む新しいタイルを返します。キャッシュ エントリーに保存されている新しい ETag 値を、そのタイルに対してサーバーに送信される後続のリクエストの If-None-Match ヘッダーとして含めます。

  • サーバー タイルがまだ有効な場合、サーバーは 304 Not Modified ステータスでレスポンスします。その場合は、キャッシュの有効期限のみを更新します (タイルと ETag は以前と同じです)。

シーケンス図

次のシーケンス図は、効率的な取得と使用のためにクライアント側 (たとえばウェブ ブラウザー) でタイルをキャッシュするプロセスを示しています。

タイルをキャッシュする

次の手順は、前の図で示されているシーケンスを説明しています。

  1. クライアントがキャッシュをチェックする:クライアントは、リクエストされたタイルがキャッシュされており有効期限が切れていないかどうかを確認します。
  2. キャッシュ ミス (キャッシュされていないか有効期限が切れている)
    • クライアントがサーバーからタイルをリクエストする
    • サーバーのレスポンス
      • タイルが変更されていない場合、サーバーは 304 Not Modified でレスポンスします。
      • タイルが変更されているか最初のリクエストである場合、サーバーは 200 OK とともにタイル データと ETag を返します。
  3. サーバー レスポンスの処理
    • サーバーが 304 Not Modified でレスポンスした場合、クライアントはキャッシュされたタイルを使用します。
    • サーバーが 200 OK でレスポンスした場合、クライアントは新しいタイルと ETag でキャッシュを更新します。
  4. キャッシュ ヒット (キャッシュされていて有効期限が切れていない):クライアントはキャッシュからタイルを正常に取得します。

次のステップ

詳細については、「APIリファレンス」を参照してください。