ダウンロード最小化戦略の概要

SharePoint の新機能であるダウンロード最小化戦略 (MDS) について説明します。MDS では、ユーザーが新しいページに移動するときに、差分のみを送信することでページのロード時間を短縮します。

ダウンロード最小化戦略 (MDS) は SharePoint の新しいテクノロジーで、ユーザーが SharePoint サイト内のあるページから別のページに移動するときにブラウザーがダウンロードする必要のあるデータの量を削減します。 MDS が有効化されているサイトをユーザーが閲覧すると、クライアントによって現在のページと要求されたページの差異 (差分) のみが処理されます。 図 1 には、ページによって変更されるため、更新が必要なセクションを示しています。 通常、差分には (1) のコンテンツ領域と、(2) のナビゲーション コントロールなど、その他のコンポーネントが含まれます。

図 1. MDS で処理されるページ

MDS で処理されるページ

MDS が有効化されているサイトを識別するには、URL を確認します。 MDS 対応サイトの URL には 、(3) _layouts/15/start.aspx ページがあり、その後にハッシュ マーク ( # ) と、要求されたリソースの相対 URL が続きます (図 1 を参照)。 たとえば、ページ newpage.aspx の MDS 形式の URL を次に示します。 https://sp_site/_layouts/15/start.aspx#/SitePages/newpage.aspxこれは、MDS 形式以外の URL と同じです。 https://sp_site/SitePages/newpage.aspx開発者は、MDS とシームレスに連携する前にいくつかの更新が必要な SharePoint コンポーネントを作成している可能性があります。

MDS の有効化

サイトで MDS を有効にするには、サイト管理ページまたは SharePoint クライアント オブジェクト モデルを使用します。

管理ページの機能をアクティブ化して MDS を有効にするには、[サイトの設定]>[サイト機能の管理] を選択し、[ダウンロード最小化戦略] 機能をアクティブ化します。

この機能は EnableMinimalDownload プロパティを変更することでアクティブ化されるため、クライアント API を使用することもできます。 以下のコードは、JavaScript オブジェクト モデル (JSOM) を使用して MDS を有効にする方法を示します。

var clientContext;

clientContext = new SP.ClientContext.get_current();
this.oWebsite = clientContext.get_web();

this.oWebsite.set_enableMinimalDownload(true);
this.oWebsite.update();

clientContext.load(this.oWebsite);

clientContext.executeQueryAsync(
    Function.createDelegate(this, successHandler),
    Function.createDelegate(this, errorHandler)
);

function successHandler() {
    alert("MDS is enabled in this site.");
}

function errorHandler() {
    alert("Request failed: " + arguments[1].get_message());
}

MDS を使用するメリット

MDS を使用することで、以下のような複数のメリットを得ることができます。

  • 速度: MDS の主要な目的は速度です。 MDS を使用する場合、ブラウザーによってクロム ユーザー インターフェイス (UI) を再処理する必要がありません。 また、完全なページのロードと比べて、MDS ではペイロードが削減されます。
  • スムーズな切り替え: 変更された領域のみを更新することで、ページ全体が "点滅" するページ全体の読み込みではなく、ユーザーの目をこれらの領域に向けて描画します。ページ全体が更新されると、ユーザーはページ全体を解析して新しい内容を検出する必要があります。 前のページから変更された領域のみを更新するサイトの方が、ユーザーにとって移動が簡単になります。
  • ブラウザーのナビゲーション コントロール: 他の AJAX ベースのシステムでは、ブラウザーの [ 前へ] ボタンと [ 次へ] ボタンとを混同しています。 MDS ではブラウザー ウィンドウの URL が更新されるため、[前へ] ボタンと [次へ] ボタンが想定したとおりに動作します。
  • 下位互換性: MDS エンジンでは、MDS ナビゲーションを即座に提供するか、不可能な場合はそれを検出します。 MDS ナビゲーションが不可能な場合、代わりに完全なページのロードが行われます。 このプロセスは フェイルオーバー と呼ばれ、すべてのページが、MDS 準拠のコンポーネントを含むかどうかに関係なく、適切にレンダリングされるようにします。 また、アンカー タグの href 属性では通常の MDS 用にフォーマットされていない URL を使用するため、MDS は検索エンジンとも適切に連動します。 クライアントの MDS エンジンでは代わりに onclick イベントをキャプチャして、サーバーとの通信に使用します。

MDS のアーキテクチャ

MDS の基本的な仕組みは非常に単純です。 MDS の主なコンポーネントは、サーバーとクライアントの 2 つのエンジンで、ユーザーがサイト内のページ間を移動したときに、変更を計算し、ブラウザーでページをレンダリングするために連携します。 図 2 は、ユーザーが MDS 対応サイト内を移動するときの MDS フローを示しています。

図 2. ユーザーがサイト内を移動するときの MDS フロー

ユーザーがサイト内を移動するときの MDS フロー

  1. ブラウザーが SharePoint サイト内の現在のページと新しいページの変更点を要求します。
  2. サーバー内の MDS エンジンが現在のページと新しいページの差分を計算します。
  3. サーバー内の MDS エンジンが差分をクライアント内の MDS エンジンに送信します。
  4. クライアント内の MDS エンジンが現在のページから変更された領域を新しいページのコンテンツに置き換えます。

結果として表示されるページは、MDS を使用しないでページをダウンロードした場合と全く同じになります。

クライアントの MDS エンジンには、ダウンロード マネージャーが含まれています。 ページ内のすべての要求は、ダウンロード マネージャー経由でルーティングされます。 URL が変更されたタイミングを確認するには、ページ内のすべてのコントロールがダウンロード マネージャーをサブスクライブする必要があります。 ダウンロード マネージャーは、すべての新しいコントロール データに対して 1 つの要求を行います。 検索エンジンを操作できるように、MDS エンジンはアンカー タグの href 属性を直接使用して MDS 形式の URL を格納しません。 代わりに、 SPUpdatePage 関数は onclick イベントを処理し、それを使用してサーバーと通信します。 SPUpdatePage 関数は、_layouts/15/start.js ファイルで宣言されます。

サーバー内の MDS エンジンによって、クライアントに情報が返送されます。 この情報には、埋め込みスクリプトおよびスタイルを含む HTML、XML または JavaScript Object Notation (JSON) を含めることができます。

MDS では URL が重要な役割を果たします。 MDS の URL は、 https://sp_site/_layouts/15/start.aspx#/SitePages/newpage.aspx のような形式です。 Start.aspx には、ページの変更点をロードするための最小限の共有 UI と指示が含まれます。 MDS では、ハッシュ記号 (#) の後続の部分がターゲット ページであると認識します。 ターゲット ページはスラッシュ (/) から始まり、その後に SharePoint Web サイトに相対する URL が続きます。 ブラウザーで URL を受信すると、ハッシュ記号の左側の部分が変更されていないことが確認され、ローカル ナビゲーション イベントが発生します。 クライアント内の MDS エンジンによってローカル ナビゲーション イベントがキャプチャされ、MDS の更新の実行に使用されます。

この記事で前述したように、状況によっては、ページを適切に更新できるかどうかを判断できない場合があります。 このような場合、MDS エンジンはフェールオーバーを発行 します。これは、ブラウザーを新しいページの完全なバージョンにリダイレクトするための余分なラウンド トリップで構成されます。 フェールオーバーが発生する最も一般的な理由は次のとおりです。

  • 新しいページのマスター ページが異なる。
  • 現在のマスター ページが変更された。
  • MDS エンジンによって、以下のような非準拠の HTML が検出された。
    • ASP.NET 2.0 を使用するページ
    • MDS エンジンに登録されていない CSS またはスクリプト
    • 無効な HTML
  • ページ内に以下のような非準拠のコントロールが含まれる。
    • MDS エンジンの許可リストにコントロールが存在しない。
    • コントロール アセンブリが準拠であるとマークされていない。
    • コントロール クラスに MDS 属性が存在しない。

ユーザーがさらに別の新しいページに移動すると、MDS エンジンでフェイルオーバーからの復旧が試行されます。

開発者のコントロール

フェイルオーバーのメカニズムがあるおかげで、ユーザーの Web サイトで MDS が有効化されているかどうかに関係なく、コントロールがシームレスに動作します。 しかし、SharePoint コントロールおよびコンポーネントを更新して、MDS のメリットを最大限に活かすことをお奨めします。 作成したページやコントロールが MDS に準拠している方が、ユーザー エクスペリエンスが向上します。 以下のコンポーネントは、いずれも MDS 用に最適化するために適したオプションです。

  • マスター ページ
  • ASP.NET ページ
  • コントロールと Web パーツ

関連項目