FAQ
ArcGIS API for JavaScript:クライアント キャッシュを行わずに常に ArcGIS for Server からデータを取得する方法

ナレッジ番号:2853 | 登録日:2023/05/29 | 更新日:2024/03/13

概要

ArcGIS for Server から一度取得したデータをキャッシュして、再度リクエストを行った場合にサーバへリクエストを送信せずにクライアントのキャッシュを利用することはアプリケーションのパフォーマンス向上につながりますが、配信しているデータのソースが更新された場合に更新情報を取得せずに更新前の情報であるキャッシュを利用し続けてしまうリスクが考えられます。

ここでは、ArcGIS API for JavaScript 3.x でレイヤの表示やタスクの処理結果を取得する際に、クライアントにキャッシュせず、常に ArcGIS for Server からデータを取得する方法を説明します。

手順

  • ArcGISDynamicMapServiceLayer の場合

    ArcGISDynamicMapServiceLayer クラスにはクライアントへのキャッシュを防ぐための setDisableClientCaching メソッドが用意されています。このパラメータを true に設定することで、ArcGISDynamicMapServiceLayer で表示されるレイヤに利用する地図画像は常に ArcGIS for Server より取得するようになります。

    var layer = new ArcGISDynamicMapServiceLayer("http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer");
    layer.setDisableClientCaching(true);
  • ArcGISDynamicMapServiceLayer 以外の場合(フィーチャ レイヤ、タスクなど)

    上記のような setDisableClientCaching メソッドは ArcGISDynamicMapServiceLayer クラスのみに実装されているため、他のレイヤやタスクでクライアント キャッシュを防ぐには別の方法で実装を行う必要があります。

    esri/request クラスには ArcGIS API for JavaScript によって生成されるリクエストに対して、そのリクエストが送信される前にパラメータを追加あるいは変更することを可能にする setRequestPreCallback メソッドが用意されています。

    以下のコードは Print ウィジェットによる印刷のリクエストに対して、印刷結果のマップを 45° 時計回りに回転するようにパラメータを追加している例です。

    esriRequest.setRequestPreCallback(myCallbackFunction);
    function myCallbackFunction(ioArgs) {          
      // リクエスト URL が印刷タスクの場合に実行
      if (ioArgs.url === "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task/execute") {          
        // Web マップ JSON にマップの回転パラメータ(rotation)を挿入
        var output = ioArgs.content.Web_Map_as_JSON.substr(0, 15) + '"rotation": 45,' + ioArgs.content.Web_Map_as_JSON.substr(15);
        ioArgs.content.Web_Map_as_JSON = output;
      }
      return ioArgs;
     }

    上記のコードと同じように、レイヤ クラスやタスク クラスによるリクエストに対して、preventCache というパラメータの値を true に設定することでクライアント キャッシュを防ぐことが可能です。

    以下のコードはフィーチャ レイヤが ArcGIS for Server からフィーチャの情報を取得するためのリクエストを行う際に、クライアント キャッシュを行わず、常に ArcGIS for Server からデータを取得するためのコード例です。

    esriRequest.setRequestPreCallback(myCallbackFunction);
    function myCallbackFunction(ioArgs) {          
      if (ioArgs.url === "http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/2/query") {
        console.log("hack!");
        ioArgs.preventCache = true;
      }
      return ioArgs;
    }

    上記コードの ioArgs が持つパラメータについては Dojo の dojo/request/script をご参照ください。

関連情報

メタデータ

種類

製品