sharepoint2013的最少下载策略概述(MDS)
该策略是 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 进行无缝协作。
您可以通过使用网站管理页面或 SharePoint 客户端对象模型在网站中启用 MDS。
若要通过在管理页面中激活 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,则浏览器不必再次处理 Chrome 用户界面 (UI)。与全页加载相比,MDS 还减少了负载。
平稳过渡:通过仅更新有变化的区域,您可以将用户注意力集中在这些区域,与整个页面“闪动”的全页加载完全不同。如果更新了整个页面,用户必须分析整个页面以找到新内容。浏览仅更新相比前一页有变化区域的网站时,用户会更轻松。
浏览器导航控件:其他基于 AJAX 的系统会混淆浏览器中的“上一页”和“下一页”按钮。由于 MDS 在浏览器窗口中更新 URL,因此上一页和下一页按钮会按本来的方式工作。
向后兼容:MDS 引擎会立即提供 MDS 导航,或者检测无法进行导航的情况。如果无法进行 MDS 导航,将显示全页加载来替代。该过程称为故障转移,可确保所有页面正确呈现,无论其中是否包含 MDS 兼容组件。MDS 还可以与搜索引擎进行很好的协作,因为定位标记的 href 属性使用常规的非 MDS 格式化 URL。然而,客户端的 MDS 引擎会捕获 onclick 事件,并使用该事件与服务器进行通信。
MDS 的基本结构很简单。MDS 的主要组件是两个引擎,一个是在服务器中,另一个是在客户端中;当用户在网站中的页面之间导航时,这两个引擎会共同协作以计算变化内容并在浏览器中呈现页面。图 2 显示了用户浏览启用了 MDS 的网站时的 MDS 流。
图 2. 用户浏览网站时的 MDS 流
浏览器请求 SharePoint 网站中当前页面和新页面之间的变化内容。
服务器中的 MDS 引擎计算当前页面和新页面之间的增量。
服务器中的 MDS 引擎将增量发送给客户端的 MDS 引擎。
客户端的 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)的更多相关文章
- Spring笔记01_下载_概述_监听器
目录 Spring笔记01 1.Spring介绍 1.1 Spring概述 1.2 Spring好处 1.3 Spring结构体系 1.4 在项目中的架构 1.5 程序的耦合和解耦 2. Spring ...
- hiberbnate 缓存策略概述
1. 首先了解什么是缓存 这里说的缓存并不是指计算机的内存或者CPU的一二级缓存. 缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略.即对物理数据源的复制,存在于内 ...
- Spring _day01_下载、概述、监听器
Spring:SE/EE开发的一站式框架. .一站式框架:有EE开发的每一层解决方案. . WEB层 :SpringMVC . Service层 :Spring的Bean管理,Spring ...
- 为 MDS 修改 SharePoint 2013组件
了解如何修改 SharePoint 项目中的组件以在 SharePoint 2013 中利用最少下载策略(MDS). 本文内容 为何修改 SharePoint 组件? 母版页 ASP.NET 页面 ...
- SharePoint 2013 页面访问,Url中间多一段"_layouts/15/start.aspx#"
问题描述: 我想访问如下页面 http://Host/_layouts/15/ManageFeatures.aspx 点击以后页面地址没有错,但是中间多了一段“_layouts/15/start.as ...
- SharePoint 2013 页面访问,Url中间多一段"_layouts/15/start.aspx#"
问题描述: 我想访问如下页面 http://Host/_layouts/15/ManageFeatures.aspx 点击以后页面地址没有错,但是中间多了一段"_layouts/15/sta ...
- SDWebImage 在多线程下载图片时防止错乱的策略
在我们使用sd的时候,对tableView 上cell得图片进行异步下载的时候会遇到这样一个问题: 由于cell的重用机制,在我们加载出一个cell的时候imageView数据源开启一个下载任务并返 ...
- Kubernetes集群安全概述
API的访问安全性 API Server的端口和地址 在默认情况下,API Server通过本地端口和安全端口两个不同的HTTP端口,对外提供API服务,其中本地端口是基于HTTP协议的,用于在本机( ...
- Unity3D热更新全书-下载 唯一的一篇
下载在这个时代实在是太平常了,每个人都深刻的理解着下载到底是什么. 这一篇文字只是把下载的代码分享并介绍,而已. 首先,下载系统担负着几个使命. 第一.是保持客户端版本库的最新. 第二.是下载要能够比 ...
随机推荐
- 利用Microsoft.Office.Interop.Excel 将web页面转成PDF
网上有很多将Web页面转成PDF的方法,还有许多收费的第三方插件.其实利用Office 自带的将EXCEL发布成PDF的功能就可以实现,如果你的需求没有多复杂,可以采用笔者的方法. 首先将web页面h ...
- Android如何避免切换至SurfaceView时闪屏(黑屏闪一下)以及黑屏移动问题
1.最近的项目中,有一个Activity用到Fragment+ViewPager,其中一个fragment中实现了视频播放的功能,包含有SurfaceView.结果,每次打开程序第一次进入到该Acti ...
- 在<a></a>标签中调用javascript脚本
有时候,我们点击了<a></a>标签(除了跳转到指定链接外)想要它调用某个方法,及调用javascript脚本,该如何做: 方法1:<a href="javas ...
- Spark入门实战系列--8.Spark MLlib(下)--机器学习库SparkMLlib实战
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .MLlib实例 1.1 聚类实例 1.1.1 算法说明 聚类(Cluster analys ...
- LoRaWAN协议(五)--OTAA入网方式详述
前言 OTAA(Over-The-Air Activation),是LoRaWAN的一种空中入网方式.当node在上电的时候处于非入网状态时,需要先入网才能和服务器进行通信.其操作就是node发送jo ...
- StringExtensions
public static string MakeSafeSql(this string s) { string t = s; t = t.Replace("'", "' ...
- OpenJudge1700:八皇后问题 //不属于基本法的基本玩意
1700:八皇后问题//搜索 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和 ...
- C#基础03
学习集合的一些知识.集合:泛型集合,非泛型集合;ArrayList,Hashtable,List<T>,Dictionary<k,v>等,还有一些集合的常用方法. 一:集合的介 ...
- 使用CKplayer插件在网页中嵌入视频的方法(常用笔记2)
在做网站中有时候我们需要在网页中嵌入视频,一般视频嵌入有以下几种方法: 1. 优酷代码嵌入 优点:简单,方便,可靠. 缺点:有广告,现在的网站非常注重用户体验,如果打开一个在线视频是有长广告的一定会崩 ...
- C# 中反射获取某类的子类和根据类型名动态创建对象
有时候,为了快速批量处理已经实现某个基类或者某个接口的子类,需要通过反射的方式获取到他们的类类型(Type),然后再通过 1 Activator.CreateInstance(objType); 或者 ...