优化 SharePoint 中的页面性能

了解用于改进 SharePoint 中的页面性能的功能。 这些功能可用于改进地域分布式实施中的体验。

提供方:Microsoft Corporation 的 David Crawford

本文提供了帮助优化 SharePoint 中性能的说明。 SharePoint 包括有助于优化通过广域网 (WAN) 进行页面加载的功能。 通过将页面设计得尽可能小而响应迅速,补充了这些性能改进。

最少下载策略 (MDS)

最少下载策略 (MDS) 依赖于仅下载完全呈现在服务器上的页面的特定部分的功能。 通过仅下载这些特定部分,提供了一个非常有效的加载模型。 完全呈现的页面不会返回到客户端。 服务器必须能够精确识别必须返回的部分以及不必要的部分。 可能属于也可能不属于响应的部分包括脚本、样式和标记。

下表显示了使用 MDS 的一些好处。

表 1. 使用 MDS 的好处

性能 视觉对象
每个页面请求下载的数据量更少。 重新加载完整页面不会导致浏览器闪烁。
浏览器仅需更新自上次请求以来更改的页面部分。 易于识别动画。
需要在客户端上进行的处理很少。 注意:客户端页面加载时间 1 (PLT1) 中有一半是用于镶边级联样式表 (CSS) 呈现和 JavaScript 分析与执行。 页面中的变化吸引用户注意力。

AJAX 和 MDS 两种技术仅请求页面的某些部分,从而最大限度地减少数据下载并改进页面响应速度。 下图显示了 MDS 体系结构。

图 1. MDS 体系结构

MDS 体系结构

MDS 框架假定母版页定义了部件版式和内容区域。 在 MDS 中,SharePoint 浏览到页面意味着仅请求这些区域的内容以及这些页面所依赖的资源。 这些内容下载到浏览器之后,脚本代码则会将标记或资源应用到相应的页面。 浏览器表现得好像请求的页面已从服务器完全加载一样。

图 2. SharePoint 页面中的页面版式和区域

SharePoint 页面中的页面版式和区域

当用户浏览到 MDS 模式的 SharePoint 网站时,将不会回发并重新加载整个页面。 相反,他们所访问的页面的 URL 将保持不变,片段标识符("#"符号)将变为包含他们所访问的页面。 URL 的格式为: [Path to site (spweb)] + /_layouts/15/start.aspx# + [path to page] + [query string]

下表显示了采用 MDS 模式的某些 URL 示例。

表 2. 采用 MDS 模式的 URL

非 MDS URL MDS URL
http://server/SitePages/ http://server/_layouts/15/start.aspx#/SitePages/
http://server/subsite/SitePages/home.aspx http://server/subsite/_layouts/15/start.aspx#/SitePages/home.aspx
http://server/_layouts/15/viewlsts.aspx?BaseType=0 http://server/_layouts/15/start.aspx#/_layouts/viewlsts.aspx?BaseType=0

用于 AJAX 导航的对象为 AjaxNavigate。 默认情况下,有一个 AjaxNavigate 实例可供您使用,名为 ajaxNavigate。 要使用 ajaxNavigate 实例,请执行以下操作:

ajaxNavigate.update(serverRelativeURL, null);

如果需要一个控件或 Web 部件来侦听导航事件,可以使用 add_navigate 处理程序。 在调用该处理程序时,回调函数会收到对导航对象的引用和字典中的已分析哈希值。 控件或 Web 部件可以从字典中检索感兴趣的参数值、将其与当前值进行比较,然后确定需要采取的操作。 常见操作是向服务器发送 AJAX 请求,以检索某些数据或对视图中的项进行重新排序。 当某个控件完成对导航事件的侦听后,即可使用 remove_navigate 处理程序。

MDS 还支持键/值对中的多个哈希标记。 MDS 会在 URL 后面追加哈希标记。 URL 中的哈希标记格式为:http://server/_layouts/15/start.aspx#/SitePages/page.aspx#key1=value1#key2=value2。 下面的代码示例展示了如何更新哈希标记。

var updateParts;
updateParts = {key1: "value1", key2: "value2", keyn: "valuen"}
ajaxNavigate.update(null, updateParts);

如果您发现网站中的页面持续后退以下载整个页面,您可能会考虑关闭 MDS 功能。 如果您希望使用其他策略来改进性能,也可以关闭 MDS 功能。

页面中的特定元素必须确保工作所需的关键资源在服务器呈现时已为 MDS 基础结构所知。 要将现有项目转换为使用 MDS,您需要更新以下文件和组件:

  • 母版页
  • ASP.NET 页面
  • 错误的自定义母版页
  • JavaScript 文件
  • 控件和 Web 部件

母版页

母版页中的主要变化是使用一个名为 SharePoint:AjaxDelta 的特殊控件,将要发送到客户端的 HTML 标记区域包围起来。 需要用 SharePoint:AjaxDelta 控件包围起来的最常见部件是母版页部件版式和内容占位符中嵌入的控件。 如果控件在网站中的所有页面上均保持不变,则不应用 SharePoint:AjaxDelta 控件封装。 以下标记显示了被 SharePoint:AjaxDelta 控件包围的可见内容占位符。

<SharePoint:AjaxDelta
  id="DeltaPlaceHolderMain"
  IsMainContent="true"
  runat="server"
>
  <asp:ContentPlaceHolder id="PlaceHolderMain" runat="server" />
</SharePoint:AjaxDelta>

具有依赖于当前 URL 的内容的控件必须用 SharePoint:AjaxDelta 控件封装。 以下标记显示了被 SharePoint:AjaxDelta 控件包围的菜单。

<SharePoint:AjaxDelta id="DeltaBreadcrumbDropdown" runat="server">
    <SharePoint:PopoutMenu
        runat="server"
        ID="GlobalBreadCrumbNavPopout"
        IconUrl=IMGCLUSTER_FG_IMG
        IconAlt=LOC_ATTR_WSS(master_breadcrumbIconAlt)
        IconOffsetX=IMGCLUSTER_FG_LEFT(BREADCRUMBBUTTON)
        IconOffsetY=IMGCLUSTER_FG_TOP(BREADCRUMBBUTTON)
        IconWidth=IMGCLUSTER_FG_WIDTH(BREADCRUMBBUTTON)
        IconHeight=IMGCLUSTER_FG_HEIGHT(BREADCRUMBBUTTON)
        AnchorCss="s4-breadcrumb-anchor"
        AnchorOpenCss="s4-breadcrumb-anchor-open"
        MenuCss="s4-breadcrumb-menu">
    </SharePoint:PopoutMenu>
</SharePoint:AjaxDelta>

注意

SharePoint:AjaxDelta 控件本身不应嵌套。 Specify this control at the highest required level.

如果您希望包含级联样式表 (CSS) 文件,则需使用 SharePoint:CssLinkSharePoint:CssRegistration 控件。 这些控件已更新为可在 MDS 和非 MDS 模式下使用。 以下标记显示如何使用 SharePoint:CssLinkSharePoint:CssRegistration 控件。

<SharePoint:CssLink runat="server" Version="15" />
<SharePoint:CssRegistration Name="my_stylesheet.css" runat="server" />

谨慎

每个页面只能有一个 SharePoint:CssLink 控件。 在 MDS 模式下,如果某个页面中包含多个 SharePoint:CssLink 控件,将收到错误。 在 MDS 模式下,不支持包含使用 HTML 样式元素的 CSS 文件,因为服务器逻辑无法在呈现响应时将此文件识别为所需资源。

要包含 JavaScript 文件,请使用 SharePoint:ScriptLink 控件。 下面的标记显示了如何使用 SharePoint:ScriptLink 控件。

<SharePoint:ScriptLink
  language="javascript"
  name="my_javascriptfile.js"
  runat="server"
/>

谨慎

在 MDS 模式下,不支持使用 HTML 脚本标记添加 JavaScript 文件,因为服务器逻辑无法在响应呈现时将此文件识别为必需资源。

要在页面的头元素内呈现标题元素,我们采用了使用 SharePoint:PageTitle 控件的特殊模式。 下面的标记显示了如何使用 SharePoint:PageTitle 控件。

<SharePoint:PageTitle runat="server">
  <asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server" />
</SharePoint:PageTitle>

注意

每个页面都必须在 SharePoint:PageTitle 控件内替换 asp:ContentPlaceHolder 控件,才能重写标题。

ASP.NET 页面

要包含 JavaScript 或 CSS 文件,请使用上一节中所述的相同 SharePoint:ScriptLinkSharePoint:CssLink 控件。

在 SharePoint 的之前版本中,某些页面使用 Response.Output 属性写入内容。 如果您使用 MDS,将不再允许此操作。 您必须将 Response.Output 调用更改为使用新的 API。 下表显示了 SharePoint 页面中的常用 API 和兼容 MDS 的新 API。

表 3. 常用 API 及其与 MDS 兼容的替代项

常用 API 与 MDS 兼容的替代项
NoEncode() WriteNoEncode()
HtmlEncode() WriteHtmlEncode()
EcmaScriptStringLiteralEncode() WriteEcmaScriptStringLiteralEncode()
HtmlEncodeAllowSimpleTextFormatting() WriteHtmlEncodeAllowSimpleTextFormatting()
HtmlUrlAttributeEncode() WriteHtmlUrlAttributeEncode()
UrlKeyValueEncode() WriteUrlKeyValueEncode()
UrlPathEncode() WriteUrlPathEncode()

如果页面、控件或 Web 部件将其输出定向到 Response.Output 属性,会导致 MDS 发生故障回复。 如果 MDS 发生故障回复,则会对请求的页面执行完整导航。 您可以在调试服务器组件时,使用 DeltaPage ._shipRender 属性查找有冲突的控件。

应使用 SharePoint:ScriptBlock 控件替换 HTML 内联脚本元素。 下面展示了 HTML 内联脚本元素及其符合 MDS 的备用 SharePoint:ScriptBlock 控件。

  • HTML 内联脚本元素

    <script type="text/javascript">
      // Your JavaScript code goes here.
    </script>
    
  • 与 MDS 兼容的替代项

    <SharePoint:ScriptBlock runat="server">
      // Your JavaScript code goes here.
    </SharePoint:ScriptBlock>
    

在页面中引入 SharePoint:ScriptBlock 可以更改页面中的变量范围。 有时必须将变量声明从 <% %> 移到 <script runat="server"> <script>。 要测试这一点,请在执行更新后在浏览器中加载页面。

注意

MDS 基础结构不支持 VBScript,因为无法在 ASP.NET 中将它注册为脚本。 必须将脚本转换为 JavaScript。

必须将 ASP.NET 页面中的超链接更新为使用 SPUpdatePage 类型。 下面展示了 ASP.NET 页面中的超链接,以及使用 SPUpdatePage 类型更新的相同链接。

  • ASP.NET 中的超链接

    <a id=<%_STSWriteHTML("viewlist" + spList.BaseTemplate.ToString());%>
        href=<%_STSWriteURL(listViewUrl);%>
      ..
    </a>
    
  • 与 MDS 兼容的替代项

    <a id=<%_STSWriteHTML("viewlist" + spList.BaseTemplate.ToString());%>
       href=<%_STSWriteURL(listViewUrl);%>
       onclick="if (typeof(SPUpdatePage) !== 'undefined') return SPUpdatePage(this.href);">
      ..
    </a>
    

错误的自定义母版页

您可以在 MDS 模式下显示错误消息,即使当您使用错误的自定义母版页时。 要在 MDS 模式下使用错误的自定义母版页,您必须在将 id 属性设置为字符串 "DeltaPlaceHolderMain" 的错误母版页中定义 AjaxDelta 。 必须将错误消息的内容呈现在 AjaxDelta 中。 当错误页面从服务器返回到浏览器时,浏览器会将其识别为要显示的主要内容并向用户显示。

尽管错误页面和 start.aspx 的母版页并不明显匹配,但浏览器可以检测到发生了错误。 浏览器允许 MDS 在现有母版页内使用相关的错误消息内容,以维持一致、流畅的用户体验。

JavaScript 文件

JavaScript 文件应仅包含函数声明。 但是,许多旧脚本仍包含全局变量初始化。 在 MDS 模式下呈现新页面时,需要重新初始化全局变量。 您可以使用 ExecuteAndRegisterBeginEndFunctions 初始化全局变量。 下面的代码示例显示了如何使用 ExecuteAndRegisterBeginEndFunctions

function ExecuteAndRegisterBeginEndFunctions(tag, beginFunc, endFunc, loadFunc)

ExecuteAndRegisterBeginEndFunctions 具有以下参数:

  • tag:注册回调的文件的名称,仅用于调试目的。
  • beginFunc:在请求页面增量之前调用的函数。
  • endFunc:在检索数据之后、应用新页面的 HTML 和 JavaScript 之前调用的函数。
  • loadFunc:在应用新页面的 HTML 和 JavaScript 之后调用的函数。

控件和 Web 部件

若要使用 MDS,控件和 Web 部件必须使用 SPPageContentManager 对象注册页面资源。 使用 SPPageContentManager 的最常注册的资源为 JavaScript 代码段(函数或 JSON 变量)和隐藏字段。 下表显示了插入隐藏字段和 JavaScript 代码段的常规模式,以及如何使用 SPPageContentManager 对象执行相同操作。

表 4. 呈现内容的常见做法及其与 MDS 兼容的替代项

呈现内容的常见做法 与 MDS 兼容的替代项
output.Write("<input type=\\"hidden\\" name=\\"");
output.Write(SPHttpUtility.NoEncode("HiddenField));
output.Write("\\" value=\\"");
output.Write(DigestValue);
output.Write("\\" />");
SPPageContentManager.RegisterHiddenField(this, "HiddenField", DigestValue);
Page.ClientScript.RegisterClientScriptBlock(typeof(MyType), "MyKey", "var myvar=1", true); SPPageContentManager.RegisterClientScriptBlock(this, typeof(MyType), "MyKey", "var myvar=1");

注意

SPPageContentManager 对象中的 RegisterHiddenFieldRegisterClientScriptBlock 函数要求第一个参数中为 ControlPage 类型的对象。

MDS 引擎使用第一个参数来筛选脚本。 以下是在 MDS 增量模式下呈现页面时的筛选规则:

  • 如果第一个参数类型为 Page ,脚本将在浏览器中执行。
  • 如果第一个参数类型不为 Page 且控件属于 SharePoint:AsyncDelta ,脚本将在浏览器中执行。
  • 如果第一个参数是 Web 部件,脚本将在浏览器中执行。

SharePoint 之前版本中的很多 API 不会将当前控件作为参数提供。 SharePoint 中的公共对象模型旨在提供注册资源的替代方法。 不将当前控件作为参数提供的方法仍位于 API 中以实现向后兼容。

您可以使用名为 SPUpdatePage 的新函数在两个页面之间导航。 在 MDS 增量模式下呈现控件或 Web 部件时, HyperLink 控件必须添加 onclick 处理程序并调用 SPUpdatePage

必须更新 Web 部件使用的 XSLT,因为必须使用 SPPageContentManager 对象添加所有资源才能使其符合 MDS。 您可以使用 SPPageContentManager 对象的 RegisterScriptLinkRegisterScriptBlock方法 将 JavaScript 代码段添加到 XSLT。

优化页面下载

了解页面的组成后,可以使用不同的方法来优化相应页面的下载体验。 一般来说,目标是最大限度地减少客户端与服务器计算机之间的往返次数,并减少通过网络传输的数据量。 本文中的指导建议可以广泛应用于各种不同的 SharePoint 实现。

表 5 中的示例展示了第一次、第二次和后续页面加载的加载时间差异。

表 5. 页面加载时间

里程碑 持续时间
第一次页面加载 3-4 秒
第二次页面加载 1.5 秒
后续页面加载 1 秒

注意

页面加载时间在特定方案下可能有所不同。 加载时间受很多变量影响,这包括但不仅限于页面大小、延迟和服务器负载。

您应将页面优化技术分为两类:第一个页面请求和后续页面请求。 第一个页面请求的优化(页面加载时间 1 或 PLT1)是第一次请求页面时有效,但不影响后续页面请求的优化。 下面是 PLT1 的部分优化:

  • 优化 HTML 标记。
  • 使用合并图像和文件;例如,将多个 CSS 文件合并成一个。 将图像合并成一个图像条或群集。
  • 使用压缩 (crunch) 技术。 有关详细信息,请参阅 压缩 (crunch) JavaScript 和 CSS 文件
  • 确认您引用的是常规 JavaScript 库的生产版本(例如 jQuery),而非调试版本。
  • 请考虑使用已知的内容交付网络 (CDN),如 Microsoft Ajax 内容交付网络。 页面中所需的文件可能已由客户端浏览器缓存。

后续页面请求优化是可以改进后续页面加载的用户体验的优化。 关键在于,您需要平衡功能损失与所获得的好处。 如果仅在用户首次点击网站时能够识别收益,则可能不值得以损失功能为代价来进行优化。

压缩 (crunch) JavaScript 和 CSS 文件

通过删除空白、样式继承和代码重用,包含 JavaScript 和样式的文件大小可能大大减小。 某些库提供常规(调试)和压缩 (crunch) 版本。 您可以通过搜索 Internet,查找自动进行文件处理的各种工具。

确认压缩版本已部署到生产服务器。 此示例显示如何通过相对简单的重新编写来减小 CSS 文件大小。

.article-ByLine {
  font-family: Tahoma, sans-serif;
  font-size: 9.5pt;
  font-style: normal;
  line-height: normal;
  font-weight: normal;
  color: #000000;
}
.article-Caption {
  font-family: Tahoma, sans-serif;
  font-size: 8pt;
  font-style: normal;
  line-height: normal;
  font-weight: normal;
  color: #000000;
}
.article-Headline {
  font-family: Tahoma, sans-serif;
  font-size: 14pt;
  font-style: normal;
  line-height: normal;
  font-weight: bold;
  color: #000000;
}
.article-SubHead {
  font-family: Tahoma, sans-serif;
  font-size: 11pt;
  font-style: normal;
  line-height: normal;
  font-weight: normal;
  color: #000000;
}
.article-Text {
  font-family: Tahoma, sans-serif;
  font-size: 10pt;
  font-style: normal;
  line-height: normal;
  font-weight: normal;
  color: #000000;
}

您通常可以找到方法实现相同的样式,并通过有效地重新编写 CSS 文件来减小文件大小。 以下示例显示了如何通过从父元素继承样式来优化以前的 CSS 大小。

BODY {
  font: 100% Tahoma, sans-serif;
}
.art-By {
  font: 79%;
}
.art-Cap {
  font: 67%;
}
.art-Head {
  font: bold 117%;
}
.art-Sub {
  font: 92%;
}
.art-Txt {
  font: 83%;
}

CSS 的第一个版本长度为 783 个字符,第二个版本长度为 140 个字符。

实体标记

实体标记 (ETag) 可能使客户端不必要地重新加载文件。 ETag 用于使用服务器生成的数字唯一标识。 在服务器群集中,每个服务器都将创建一个不同的编号。 例如,对于在缓存中找到的文件,浏览器将使用 If-Modified 头字段发送 Get 方法。 如果只有一个服务器,文件可能匹配并将发送 304 Not-Modified http 状态。 但是,如果用户正在访问大型服务器场,可能会命中一个使用不同实体标记的其他服务器,使该服务器向浏览器发送文件。

缓存设置

使用 Fiddler 或类似的工具确认缓存是否为请求提供服务。 缓存不为请求提供服务的部分原因包括:

  • 资源没有过期日期值。
  • 查询字符串一直在变化。
  • max-age 缓存控制指令加上 last-modified 头的和产生了一个早于今天的日期。
  • 代理服务器不支持 max-age 属性。
  • cache-control 头的值为 no-cache 。 若值为 private,将缓存仅适用于发出该请求的用户的资源。

图像的数量和大小

应最大限度地减少网站上的图像数量。 为了有助于实现此目标,可以将多个图像嵌入一个文件中,再在页面中引用各个图像。 这样一来,不仅文件下载大小会变小,网络流量也会随文件变少而变小。 虽然使用这种技术编写页面更加复杂,但如果每次往返和每个文件大小都需要进行统计,就可以证明这是有助于提升性能的宝贵方法。

图 3 中的示例展示了一个包含多个图像的图像文件

图 3. 包含多个图像的单个图像文件

包含多个图像的单个图像文件

图 4 说明了后来如何将图像文件更改为在表中显示单个图片。

图 4. 在表格中显示的多个图像

在表格中显示的多个图像

已通过样式表类完成图像操作。 每个表格单元的 divimg 元素中使用两个主要类。 这些类如下所示。

BODY {
  font: 100% Tahoma, sans-serif;
}
.art-By {
  font: 79%;
}
.art-Cap {
  font: 67%;
}
.art-Head {
  font: bold 117%;
}
.art-Sub {
  font: 92%;
}
.art-Txt {
  font: 83%;
}

.cluster {
  height: 50px;
  position: relative;
  width: 50px;
}
.cluster img {
  position: absolute;
}

根据图像的标识符 (ID),每个图像都有一个与其关联的类。 该样式剪辑图片,并定义与群集中初始图片的偏差。 这些类如下所示。

#person {
  border: none;
  clip: rect(0, 49, 49, 0);
}
#keys {
  clip: rect(0, 99, 49, 50);
  left: -50px;
}
#people {
  clip: rect(0, 149, 49, 100);
  left: -100px;
}
#lock {
  clip: rect(0, 199, 49, 150);
  left: -150px;
}
#phone {
  clip: rect(0, 249, 49, 200);
  left: -200px;
}
#question {
  clip: rect(0, 299, 49, 250);
  left: -250px;
}

列表视图页面

Microsoft 一直努力量化和改进列表视图页面呈现时间的性能。 列表视图页面是每个列表和库浏览内容时使用的 AllItems.aspx 页面。 该页面的呈现时间会基于视图中可见的列的数目和列的格式发生较大的变化。 例如,显示选项和启用状态图标可能对呈现时间产生很大的影响。 折叠的分组选项所需的呈现时间可能比展开的分组选项要长得多,而这两者又比完全没有分组选项要慢。

正因为存在上述各类差异,您必须仔细考虑如何在列表视图页中构造视图,特别是在网络连接速度较慢时。 使用包含大量数据的列表时,必须谨慎设计所有视图,尤其是默认视图。 通常情况下,您可以使用以下建议,加速列表视图页面的呈现时间:

  • 仅显示确实需要的列。
  • 如果可能,排除包含状态信息的列。
  • 使用链接而非编辑菜单来查看项目详细信息。

下表列出了可缩短视图呈现所需时间的自定义。

表 6. 用于降低视图呈现时间的自定义设置

Item 说明
视图类型 将视图创建为数据表视图,而非标准视图。
视图:项限制 超过 1000 个的项目可能都会呈现得很慢。在连接缓慢的情况下,必须进行试验,在一次显示的数据量和查看所有数据所需的往返次数之间找到适当的平衡点。一次显示的行数越多,往返次数就越少,但页面也越大。
视图:筛选器 使用 [Today][Me] 关键字,按刷新日期或作业分配情况筛选项。 使用状态字段在默认视图中仅显示活动项。
视图:列 添加数量最少的列。创建包含少量列的默认视图,以便用户可以在简要浏览后向下钻取。

下表介绍了将增加呈现视图所需的时间的自定义项。 每增加一个列就会增加少量呈现时间:在网络连接速度较快的情况下,对于包含 1,000 个项目的列表,每个列的呈现时间最多为半秒。 有些列增加的呈现时间将多于其他的列,如表中所述。

表 7. 用于增加视图呈现时间的自定义设置

Item 说明
分组依据 分组将添加 HTML 和 JScript,这将减慢大型列表的呈现速度。 默认情况下,所有组折叠,这实际上会进一步增加呈现时间,因为需要对浏览器对象模型执行额外操作。
列 - 标题“链接到带编辑菜单的项” “链接到带编辑菜单的项”选项用时最长。 类似选项“链接到项”不会显著增加呈现时间。

开发人员仪表板

将为 SharePoint 重新构建开发人员仪表板,以提供详细信息,包括 MDS。 它在单独的窗口中运行以避免呈现实际页面,并使用图表视图提供每个页面的详细请求信息。 它还包括特定请求的统一日志记录系统 (ULS) 日志条目的专用选项卡。 还包含其他详细信息,以进行请求分析。 它使用设计为提供跟踪信息的专用 Windows Communication Foundation (WCF) 服务 (diagnosticsdata.svc)。

了解有关开发人员仪表板的详细信息:

要启用开发人员仪表板,请使用以下 Windows PowerShell 代码段。

$content = ([Microsoft.SharePoint.Administration.SPWebService]::ContentService)
$appsetting = $content.DeveloperDashboardSettings
$appsetting.DisplayLevel = [Microsoft.SharePoint.Administration.SPDeveloperDashboardLevel]::On
$appsetting.Update()

图 5. 开发人员仪表板

开发者仪表板

请务必了解这些请求以及图像和查询数量对性能造成的影响。 对于服务器端呈现列表视图(XSL 或 CAML),也有相同之处,因为它们与客户端呈现列表视图遵循的大小建议相同。 不过,如果目标是实现最佳性能,根据服务器列表视图指南,只能创建满足需求的必要列表视图,因为数千个视图会导致性能因编译缓存管理而大大降低。 整体速度取决于计算机的物理特性(如内存和处理器速度)。

还要考虑请求的路由目标位置或分发方式。 为了更好地理解 SharePoint 如何路由和分发请求,可以使用请求管理器工具。 不过,请求分发并不在本文的介绍范围之内。 有关详细信息,请参阅在 SharePoint 中配置请求管理器

结束语

SharePoint 2010 页面性能优化的大部分指南都适用于 SharePoint。 本文提供了 SharePoint 2010 指南的某些元素,同时深入讨论对性能有益处的新领域。 我们涵盖了一些明显的变更或增强功能,例如 MDS 和增强的开发人员仪表板。 我们还提供了一些常规指南:压缩 JavaScript 和级联样式表、根据需要对常规 JavaScript 库使用 CDN 以便进行缓存、尽量合并和压缩图像、限制或删除视图中的不必要数据,以及恰当构建列表视图。 本文讨论的技术和功能有助于实现您的性能目标。

另请参阅