ダウンロード最小化戦略の概要
SharePoint の新機能であるダウンロード最小化戦略 (MDS) について説明します。MDS では、ユーザーが新しいページに移動するときに、差分のみを送信することでページのロード時間を短縮します。
ダウンロード最小化戦略 (MDS) は SharePoint の新しいテクノロジーで、ユーザーが SharePoint サイト内のあるページから別のページに移動するときにブラウザーがダウンロードする必要のあるデータの量を削減します。 MDS が有効化されているサイトをユーザーが閲覧すると、クライアントによって現在のページと要求されたページの差異 (差分) のみが処理されます。 図 1 には、ページによって変更されるため、更新が必要なセクションを示しています。 通常、差分には (1) のコンテンツ領域と、(2) のナビゲーション コントロールなど、その他のコンポーネントが含まれます。
図 1. 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 フロー
- ブラウザーが SharePoint サイト内の現在のページと新しいページの変更点を要求します。
- サーバー内の MDS エンジンが現在のページと新しいページの差分を計算します。
- サーバー内の MDS エンジンが差分をクライアント内の MDS エンジンに送信します。
- クライアント内の 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 パーツ