该策略是 SharePoint 2013 中的一种新功能,通过在用户导航到新页面时仅发送差异内容来减少页面加载时间。

最少下载策略 (MDS) 是 SharePoint 2013 中的一种新技术,可减少用户在 SharePoint 网站中从一个页面导航到另一个页面时浏览器需要下载的数据量。当用户浏览启用了 MDS 的网站时,客户端仅处理当前页面和请求页面之间的差异内容(或增量)。图 1 显示了页面之间出现变化且因此需要更新的部分。增量通常包含 (1) 内容区域中的数据,以及 (2) 导航控件之类的其他组件。

图 1. 使用 MDS 处理的页面

您可以通过查看 URL 识别启用了 MDS 的网站。启用了 MDS 的网站的 URL 中包含 (3) _layouts/15/start.aspx 页面,后跟哈希标记 (#) 及请求资源的相关 URL,如图 1 所示。例如,下面是页面 newpage.aspx 的 MDS 格式化 URL:

https://sp_site/_layouts/15/start.aspx#/SitePages/newpage.aspx

该 URL 相当于下面非 MDS 格式化的 URL:

https://sp_site/SitePages/newpage.aspx

作为开发人员,您可能已创建 SharePoint 组件,这些组件需要进行一些更新才能与 MDS 进行无缝协作。

启用 MDS


您可以通过使用网站管理页面或 SharePoint 客户端对象模型在网站中启用 MDS。

若要通过在管理页面中激活 MDS 功能来启用,请选择“网站设置”>“管理网站功能”,然后激活“最少下载策略”功能。

由于该功能是通过修改 EnableMinimalDownload 属性激活,因此您也可以使用客户端 API。下面的代码显示了如何使用 JavaScript 对象模型 (JSOM) 启用 MDS。

JavaScript

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,则浏览器不必再次处理 Chrome 用户界面 (UI)。与全页加载相比,MDS 还减少了负载。

  • 平稳过渡:通过仅更新有变化的区域,您可以将用户注意力集中在这些区域,与整个页面“闪动”的全页加载完全不同。如果更新了整个页面,用户必须分析整个页面以找到新内容。浏览仅更新相比前一页有变化区域的网站时,用户会更轻松。

  • 浏览器导航控件:其他基于 AJAX 的系统会混淆浏览器中的“上一页”和“下一页”按钮。由于 MDS 在浏览器窗口中更新 URL,因此上一页和下一页按钮会按本来的方式工作。

  • 向后兼容:MDS 引擎会立即提供 MDS 导航,或者检测无法进行导航的情况。如果无法进行 MDS 导航,将显示全页加载来替代。该过程称为故障转移,可确保所有页面正确呈现,无论其中是否包含 MDS 兼容组件。MDS 还可以与搜索引擎进行很好的协作,因为定位标记的 href 属性使用常规的非 MDS 格式化 URL。然而,客户端的 MDS 引擎会捕获 onclick 事件,并使用该事件与服务器进行通信。

MDS 体系结构


MDS 的基本结构很简单。MDS 的主要组件是两个引擎,一个是在服务器中,另一个是在客户端中;当用户在网站中的页面之间导航时,这两个引擎会共同协作以计算变化内容并在浏览器中呈现页面。图 2 显示了用户浏览启用了 MDS 的网站时的 MDS 流。

图 2. 用户浏览网站时的 MDS 流

  1. 浏览器请求 SharePoint 网站中当前页面和新页面之间的变化内容。

  2. 服务器中的 MDS 引擎计算当前页面和新页面之间的增量。

  3. 服务器中的 MDS 引擎将增量发送给客户端的 MDS 引擎。

  4. 客户端的 MDS 引擎将当前页面上的变化区域替换为新页面内容。

生成的页面与未使用 MDS 情况下所下载的页面完全相同。

客户端的 MDS 引擎包含一个下载管理器。页面中的所有请求都通过下载管理器传送。页面中的所有控件必须订阅下载管理器以了解 URL 何时出现更改。下载管理器对所有新控件数据作出一次请求。为了能够与搜索引擎协作,MDS 引擎不直接使用定位标记的 href 属性来存储 MDS 格式化的 URL。作为替代,SPUpdatePage 函数会处理 onclick 事件并使用该事件与服务器通信。SPUpdatePage 函数在 _layouts/15/start.js 文件中声明。

服务器中的 MDS 引擎将信息发送回客户端。此信息可能包含具有嵌入式脚本和样式的 HTML、XML 或 JavaScript 对象表示法 (JSON)。

URL 在 MDS 中起着重要作用。MDS URL 应如下所示:https://sp_site/_layouts/15/start.aspx#/SitePages/newpage.aspx。Start.aspx 包含加载页变化的最少共享 UI 和说明。MDS 将哈希标记 (#) 之后的部分视为目标页面。目标页面以斜线 (/) 开头,后跟与 SharePoint 网站相关的 URL。当浏览器收到 URL 时,会发现哈希标记左侧的部分发生更改,因此触发本地导航事件。客户端的 MDS 引擎捕获本地导航事件,并使用该事件执行 MDS 更新。

如本文中前面所述,在某些情况下无法确定页面能否正确更新。在这些情况下,MDS 引擎会发出故障转移,其中包含额外的往返过程,可将浏览器重定向到新页面的完整版本。以下是出现故障转移的最常见原因:

  • 新页面具有不同母版页。

  • 当前母版页已更改。

  • MDS 引擎检测到不兼容的 HTML,例如:

    • 使用 ASP.NET 2.0 的页面

    • 未在 MDS 引擎中注册的 CSS 或脚本

    • 非法 HTML

  • 页面上有不兼容的控件,例如:

    • 控件不在 MDS 引擎白名单中。

    • 控件程序集未标记为兼容。

    • 控件类不具有 MDS 属性。

当用户导航到另一个新页面后,MDS 引擎尝试从故障转移恢复。

开发人员控件


由于存在故障转移机制,无论用户网站中是否启用了 MDS,您的控件都可以无缝工作。但是,最好更新您的 SharePoint 控件和组件以充分利用 MDS。在页面和控件与 MDS 兼容的情况下,用户可以获得更好体验。以下是可针对 MDS 优化的良好候选对象:

  • 母版页

  • ASP.NET 页面

  • 控件和 Web 部件

sharepoint2013的最少下载策略概述(MDS)的更多相关文章

  1. Spring笔记01_下载_概述_监听器

    目录 Spring笔记01 1.Spring介绍 1.1 Spring概述 1.2 Spring好处 1.3 Spring结构体系 1.4 在项目中的架构 1.5 程序的耦合和解耦 2. Spring ...

  2. hiberbnate 缓存策略概述

    1. 首先了解什么是缓存 这里说的缓存并不是指计算机的内存或者CPU的一二级缓存. 缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略.即对物理数据源的复制,存在于内 ...

  3. Spring _day01_下载、概述、监听器

    Spring:SE/EE开发的一站式框架. ​ .一站式框架:有EE开发的每一层解决方案. ​ . WEB层 :SpringMVC ​ . Service层 :Spring的Bean管理,Spring ...

  4. 为 MDS 修改 SharePoint 2013组件

    了解如何修改 SharePoint 项目中的组件以在 SharePoint 2013 中利用最少下载策略(MDS).   本文内容 为何修改 SharePoint 组件? 母版页 ASP.NET 页面 ...

  5. SharePoint 2013 页面访问,Url中间多一段"_layouts/15/start.aspx#"

    问题描述: 我想访问如下页面 http://Host/_layouts/15/ManageFeatures.aspx 点击以后页面地址没有错,但是中间多了一段“_layouts/15/start.as ...

  6. SharePoint 2013 页面访问,Url中间多一段"_layouts/15/start.aspx#"

    问题描述: 我想访问如下页面 http://Host/_layouts/15/ManageFeatures.aspx 点击以后页面地址没有错,但是中间多了一段"_layouts/15/sta ...

  7. SDWebImage 在多线程下载图片时防止错乱的策略

    在我们使用sd的时候,对tableView  上cell得图片进行异步下载的时候会遇到这样一个问题: 由于cell的重用机制,在我们加载出一个cell的时候imageView数据源开启一个下载任务并返 ...

  8. Kubernetes集群安全概述

    API的访问安全性 API Server的端口和地址 在默认情况下,API Server通过本地端口和安全端口两个不同的HTTP端口,对外提供API服务,其中本地端口是基于HTTP协议的,用于在本机( ...

  9. Unity3D热更新全书-下载 唯一的一篇

    下载在这个时代实在是太平常了,每个人都深刻的理解着下载到底是什么. 这一篇文字只是把下载的代码分享并介绍,而已. 首先,下载系统担负着几个使命. 第一.是保持客户端版本库的最新. 第二.是下载要能够比 ...

随机推荐

  1. Android基于mAppWidget实现手绘地图(六)–如何展示地图对象

    为了展示选中的点,你需要完成以下步骤: 1.创建或者获得一个已经存在的图层 2.创建代表选中点的地图对象 3.把地图对象添加到图层 创建新图层 使用以下代码片段创建图层 int COFFEE_SHOP ...

  2. 决战JS(二)

    紧接着上次的<决战JS>,分析总结一些比较实用的DEMO与新手分享,望大神拍砖. demo5.点击隐藏: 要实现这个功能只需要知道在onclick事件中加入对父节点的样式dislay设置为 ...

  3. [Linux] LD_LIBRARY_PATH

    该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径(该路径在默认路径之前查找).若共享库不在缺省路径/lib或者/usr/lib下,就需要指定其他路径.实践中的一种解决方案是, ...

  4. 使用AndroidStudio报错:INSTALL_FAILED_UPDATE_INCOMPATIBLE

    安装Android Studio后,用真机调试运行项目时出现:INSTALL_FAILED_UPDATE_INCOMPATIBLE这个错误 原因: 1. 可能是设备内存不足: 2. APP已经存在: ...

  5. Twitter Bootstrap深受开发者喜爱的11大理由

    Bootstrap,作为创新技术框架,使开发者.设计者更容易.更快捷.更出色地完成网站及应用的搭建工作.如果你还没有使用Twitter Bootstrap,建议你去了解一下.Bootstrap为开发者 ...

  6. SQL 聚合函数

    SQL聚合函数 MAX---最大值 MIN--最小值 AVG--平均值 SUM--求和 COUNT--记录的条数 EXample: --从MyStudent表中查询最大年龄,最小年龄,平均年龄,年龄的 ...

  7. C#协变和逆变

    我们知道在C#中,是可以将派生类的实例赋值给基类对象的.

  8. C# 与 Java 中的枚举

    C#代码: 利用扩展方法,扩展枚举功能 using System; using System.Collections.Generic; using System.Text; using System. ...

  9. 基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder

    Web开发上有很多HTML的编辑控件,如CKEditor.kindeditor等等,很多都做的很好,本文主要介绍在MVC界面里面,CKEditor的配置和使用.CKEditor的前身是FCKEdito ...

  10. wcf和web service的区别

    1.WebService:严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单 ...