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热更新全书-下载 唯一的一篇
下载在这个时代实在是太平常了,每个人都深刻的理解着下载到底是什么. 这一篇文字只是把下载的代码分享并介绍,而已. 首先,下载系统担负着几个使命. 第一.是保持客户端版本库的最新. 第二.是下载要能够比 ...
随机推荐
- [译]对 AngularJS 模板的A/B测试
编者按:本文翻译自 Andrei Bondarev 在 Medium 上发布的"A/B Testing your AngularJS Templates ",Andrei 是一名工 ...
- 可视化(番外篇)——在Eclipse RCP中玩转OpenGL
最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl绘图的想法,网上有博文详细介绍这方面的内容, ...
- CSS Vocabulary – CSS 词汇表,你都掌握了吗?
CSS 是前端开发必备技能,入门容易,深入难.比如像 Pseudo-class.Pseudo-element.Media query.Media type 以及 Vendor prefix 的概念,很 ...
- Clank – 快速构建移动 APP 原型的 HTML/CSS 框架
Clank 是一个自由和开放源码的 HTML/CSS 框架,可以帮助你轻松创建本地手机或平板电脑应用程序的原型.它着重于提供一致的用户界面,不会刻意去模仿一个特定的 OS .该框架是基于组件的,这样我 ...
- js cookie存储方法
/*! * jQuery Cookie Plugin v1.4.0 * https://github.com/carhartl/jquery-cookie * * Copyright 2013 Kla ...
- Azure REST API (1) 前言
<Windows Azure Platform 系列文章目录> 一.服务运行时API简介 微软的Windows Azure服务总线提供了一整套REST风格的API,其中包括服务运行时API ...
- 基于HTML5的3D网络拓扑自动布局
上篇将HT for Web的3D拓扑弹力布局的算法运行在Web Workers后台(http://www.hightopo.com/blog/70.html),这篇我们将进一步折腾,将算法运行到真正的 ...
- 【原创】kafka controller源代码分析(二)
四.TopicDeletionManager.scala 管理topic删除的状态机,具体逻辑如下: TopicCommand发送topic删除命令,在zk的/admin/delete_topics目 ...
- node.js下when.js(Promises/A)的实践
假设一个业务场景: 通过rss地址,获取rss并保存于文件,rss地址保存于文件中. 完成该场景的业务需要完成3个任务: 1.从文件中读取rss地址. 2.获取rss. 3.保存于文件. 最后将这三个 ...
- 获取MS SQL TABLE列名列表
在MS SQL Server中,想获取表的所有列名,可以使用下面SQL语句: SELECT [COLUMN_NAME] FROM [INFORMATION_SCHEMA].[Columns] WHER ...