Office SharePoint Server 2007 中的缓存

本文内容:

  • 输出缓存

  • 对象缓存

  • BLOB 的基于磁盘的缓存

Microsoft Office SharePoint Server 2007 附带了可用于最大限度提高网站性能的高级缓存功能。本文介绍不同类型的缓存以及如何优化缓存以满足特定的部署需求。

下表显示了可用的缓存类型及实施每类缓存的位置。

使用此类型的缓存… 位置… 备注

输出缓存和缓存配置文件

单页级别

适用于无需频繁显示新内容的访问量大的网站。

对象缓存

单个 Web 部件控件、字段控件和内容级别

包括跨列表查询缓存和导航缓存

二进制大型对象 (BLOB) 的基于磁盘的缓存

单个 BLOB 级别

支持 .gif, .jpg, .js, .css 以及其他图像、声音和存储为 BLOB 的代码文件

输出缓存

Office SharePoint Server 2007 使用 ASP.NET 2.0 自带的输出缓存技术来管理何时以及如何提供页面内容。如果输出缓存使用得当,它可以显著提高吞吐量并缩短用户的响应时间。

如果网站启用了 ASP.NET,则 ASP.NET 输出缓存会根据指定的缓存配置文件来缓存在运行时生成的每个网页的 HTML 标记。在访问量大的网站上,即使将频繁访问的页面只缓存一分钟,也可能会大幅度提高吞吐量。当某页面由输出缓存进行缓存时,在指定的缓存持续时间内,将通过该输出缓存来处理具有类似权限的用户对该页面的后续请求,而不必执行用于创建该页面的代码或控件。

备注

仅在已对网站集激活 Office SharePoint Server 发布基础架构功能以及对网站激活 Office SharePoint Server 发布功能时,才能对该网站或网站集使用输出缓存。您可以为网站集启用和配置输出缓存,方法是:单击网站集的“网站设置”页上的“网站集输出缓存”,以及单击网站的“网站设置”页上的“网站输出缓存”。如果尚未对该网站集激活 Office SharePoint Server 发布基础架构功能,并且尚未对该网站激活 Office SharePoint Server 发布功能,则“网站设置”页上将不会显示“网站集输出缓存”和“网站输出缓存”链接,并且您将无法启用或配置输出缓存。

   

有关启用输出缓存的详细信息,请参阅输出缓存和缓存配置文件(https://go.microsoft.com/fwlink/?linkid=78928&clcid=0x804)。

输出缓存注意事项

在选择使用输出缓存来提高页面性能和改善页面项呈现效果之前,请先考虑实现输出缓存的优点和限制。

这些优点包括:

  • 输出缓存适用于不需要频繁更新内容的网站。在此环境中,可将缓存的输出呈现给不同的用户,而无需访问数据库或重新运行最初创建网页的 HTML 标记的代码或控件。

  • 输出缓存可用于匿名用户和经过身份验证的用户,但它在进行匿名访问时最有效。因此,只要合适且可行,则可以为网站的一部分或整个网站启用匿名用户访问。

这些限制包括:

  • 输出缓存会占用额外的内存来缓存每个缓存页的 HTML 标记。请确保安装足够的物理内存,以避免出现系统分页或其他内存问题。

  • 当用于两台或多台 Web 服务器时,输出缓存可能会影响一致性。您可以将缓存配置文件配置为不检查每个请求的更新,例如,将配置文件配置为在原始网页更新后 60 秒内,忽略网页在输出缓存中的版本更改。假设您的拓扑中有两台 Web 服务器,如果页面由其中一台服务器呈现,然后在 60 秒的时间内,后续请求被传送到另一台服务器,则根据用来传送用户请求的负载平衡器,读者看到的内容可能会不一致。如果在缓存配置文件中启用更改检查,则会降低输出缓存的有效性。

  • 如果为具有网站集写入权限的用户启用输出缓存,则在输出缓存页面过期之前,这些用户可能看不到该网站集中的网页上的最新数据。通常,这不会对用户当前更改或查看的网页内容产生直接影响,但可能会影响列表或库中的汇总数据,例如通过文档库 Web 部件显示的数据。因此,如果您要确保具有写入权限的用户能够查看所有最新信息,则只应为具有只读权限的用户启用输出缓存。

输出缓存行为

可以指定以下级别的输出缓存行为:

  • 网站集

  • 网站

  • 页面布局

给定服务器场、网站集或网站的管理员可以通过应用不同的缓存配置文件,优化他们对其具有管理权限的级别的缓存行为。例如,您的网站主页可能访问最为频繁,您可以为主页使用特殊的页面布局,这样您就可以将特殊的缓存配置文件应用于该页面布局,并替代整个网站集的缓存行为。相比之下,可以为页面布局配置缓存持续时间较长的缓存配置文件。在您能够接受及时性优先于性能的情况下,这使您能够优化主页数据的及时性。对于系统中的其他页面,您可以使用缓存持续时间较短的其他缓存配置文件。

搜索结果缓存

在使用用户身份验证的环境中,决不要缓存搜索结果。这样做可能会将特权信息泄露给未经授权的用户。搜索查询会筛选其结果集,只显示当前用户可访问的信息。但在缓存搜索结果时,将绕过用于筛选结果集的代码。因此,未经授权的用户也许能够查看他们本无权访问的结果。相反,在匿名环境中不会出现此问题,因为所有搜索结果均为未经身份验证的请求的结果。

如果在网站集上启用了输出缓存,则可以通过执行以下步骤来禁用搜索结果页面布局。

禁用搜索结果页面布局

  1. 在网站集的首要网站的“网站操作”菜单上,指向“网站设置”,然后单击“修改所有网站设置”。

  2. 在“网站设置”页上的“网站集管理”部分中,单击“网站集输出缓存”。

  3. 在“网站集输出缓存设置”页上,选中“各个页面布局可以使用不同的页面输出缓存配置文件”复选框,然后单击“确定”。

  4. 在“网站设置”页上的“库”部分中,单击“母版页和页面布局”。

  5. 在“母版页样式库”页上,指向“SearchResults.aspx”,单击出现的箭头,并在显示的菜单上单击“编辑属性”,然后在出现的对话框中单击“确定”。

  6. 在“母版页样式库: SearchResults”页上的“已验证缓存配置文件”列表中,单击“已禁用”,然后单击“确定”。

  7. 在“母版页样式库”页上,指向“SearchResults.aspx”,单击出现的箭头,然后在显示的菜单上单击“签入”。

  8. 在“签入”页上,选择“主要版本(发布)”,然后单击“确定”。系统将不再缓存使用该特定页面布局的搜索结果。

ASP.NET 私有字节限制

如果启用输出缓存,则可能需要扩展对 ASP.NET 2.0 默认的私有字节数限制。该限制会指示 ASP.NET 应在何时刷新其输出缓存。提前刷新将导致不必要的性能下降。有关详细信息,请参阅 caching 的 cache 元素(ASP.NET 设置架构) (https://go.microsoft.com/fwlink/?linkid=78934&clcid=0x804)。

缓存网页版本

某些网页所呈现的版本可能会略微不同,具体取决于用户或其他业务逻辑。可使用受支持的可编程 API 来扩展输出缓存,以满足以不同方式缓存各个项目的需要。有关详细信息,请参阅如何:使用 VaryByCustom 事件处理程序扩展缓存(https://go.microsoft.com/fwlink/?linkid=78935&clcid=0x804)。

输出缓存和内容查询 Web 部件 RSS 源

利用内容查询 Web 部件,可提供该部件所显示的结果的 RSS 源。此 RSS 源是由服务器上的 .aspx 页生成的,该页面可根据内容查询 Web 部件显示的相同结果生成 RSS 源 XML。

因为 RSS 客户端通常会定期(例如每 30 分钟)从服务器请求 RSS 源,因此顺利地生成 RSS 源非常重要。因此,RSS 源 .aspx 页实现了输出缓存。在 .aspx 文件的源代码中,您将看到下面的行:

<%@ OutputCache Duration="300" VaryByParam="xsl;web;page;wp" VaryByCustom="rights;feedresults"%>

这意味着,默认情况下,系统会将内容查询 RSS 源缓存 5 分钟(300 秒),为每个不同的内容查询 Web 部件缓存 RSS 源的唯一版本,并为具有不同权限和不同源结果的用户缓存 RSS 源的唯一版本。

如果您希望自定义此输出缓存,则可以创建可实现相同逻辑但具有不同输出缓存设置的自己的源 .aspx 页。然后,内容查询 Web 部件便可以引用您的自定义源 .aspx 页,而不是默认页面。

此外,如果搜索中心网站中有一些网页容易受到可能存在的同一安全问题的影响,则可以对整个搜索中心网站禁用输出缓存。若要对搜索中心网站禁用输出缓存,请执行以下过程:

对搜索中心网站禁用输出缓存

  1. 在网站集的首要网站的“网站操作”菜单上,指向“网站设置”,然后单击“修改所有网站设置”。

  2. 在“网站设置”页上的“网站集管理”部分中,单击“网站集输出缓存”。

  3. 在“网站集输出缓存设置”页上的“页面输出缓存策略”部分中,选中“发布网站时,可以使用其他页面输出缓存配置文件”复选框,然后单击“确定”。

  4. 在顶部导航栏中,单击“搜索”选项卡。

  5. 在“搜索中心”主页上的“网站操作”菜单上,指向“网站设置”,然后单击“修改所有网站设置”。

  6. 在搜索中心网站的“网站设置”页上的“网站管理”部分中,单击“网站输出缓存”。

  7. 在“发布网站输出缓存设置”页上的“已验证缓存配置文件”部分中,选择“继承配置文件‘已禁用’”选项按钮。

  8. (可选)如果要对所有子网站禁用已验证输出缓存,可以选中“将这些设置应用于所有子网站”复选框。

对象缓存

Office SharePoint Server 2007 支持缓存某些网页项目,如导航数据和通过跨列表查询访问的数据。通过缓存网页项目,就不必在每次呈现页面时从数据库检索字段数据。缓存系统还会缓存页面中的所有字段数据,但不包括该页面上任何 Web 部件控件的相关数据。

对象缓存调整

默认情况下,每个网站集的对象缓存的大小设置为 100 MB,但可以针对每个网站集修改这一设置以符合网站的特征。您可以使用一组性能计数器来调整对象缓存的大小。性能计数器对象的名称为“SharePoint 发布缓存对象”。您可以根据缓存命中率和对象放弃计数器中的更改来相应地设置对象缓存的大小。在设置此限制时请考虑下列事项:

  • 从较低值(如 200 MB)开始并监控缓存命中率和对象放弃计数器。如果命中率超过 90% 且对象放弃率较低,则通常是一个好迹象,表明当前对象缓存已足够大。但是,您还应度量关键操作的用户响应时间以调整此设置。

  • 如果将对象缓存设置得太大,则可能会浪费可供其他缓存(如 ASP.NET 输出缓存)使用的宝贵内存。某些 Web 部件(如内容查询 Web 部件)可将其 XSLT 样式表存储到输出缓存中。如果将对象缓存设置得太大,则 ASP.NET 可能会刷新输出缓存内存以为其释放空间。刷新后 CPU 使用率可能会增加。这一点对于运行在 32 位操作系统上的系统尤为重要,因为每个工作进程只能使用 2 GB 的应用程序内存空间。如果将对象缓存大小限制设置得太大,则 IIS 工作进程 (w3wp) 会耗尽内存。

跨列表查询缓存

对象缓存还可用于缓存在跨列表查询过程中检索到的项。这些查询可聚合网站集中各个列表和网站中的项目。这些查询通常用于内容查询 Web 部件。每次使用跨列表查询均需要执行到数据库服务器的往返行程。通过使用对象缓存,可以极大地减少进行跨列表查询所需的往返行程数,从而提高可显示跨列表查询结果的内容查询 Web 部件等功能的性能。

检查更新

可以将跨列表查询缓存配置为使用两种方法检查更新,并有条件地刷新缓存:

  • 检查在网站集中所做的更改。如果未进行任何更改,将使用缓存的结果。

  • 等候一段时间,在这段时间内将使用缓存的结果,此后将发布查询以刷新缓存。

如果网站集中跨列表查询所显示的内容会频繁更改,且该查询必须显示最新信息,则第一个设置很有用。例如,某个部门 Intranet 门户网站显示最新文档的跨列表查询。在该网站中,许多用户都是参与者,能够查看用户已发布的最新文档可能很重要。

如果网站集中的内容不会频繁更改,且跨列表查询是否显示最新信息并不重要,则第二个设置很有用。例如,某个公共 Internet 网站显示已在其中发布的跨列表查询的最新文章页。该网站中的大多数用户都是匿名用户,或者是具有只读权限的经过身份验证的用户。在这种情况下,延迟几分钟显示最新文章不会产生很大的影响。

可以通过执行以下过程来配置跨列表查询缓存。

配置跨列表查询缓存

  1. 在网站主页的“网站操作”菜单上,指向“网站设置”,然后单击“修改所有网站设置”。

  2. 在“网站设置”页上的“网站集管理”部分中,单击“网站集对象缓存”。

  3. 在“跨列表查询缓存更改”部分中,根据所需的跨列表查询缓存的更新方式,选择适当的选项按钮。如果选择“在以下时间(秒)内使用跨列表查询的缓存结果”选项,请在文本框中键入一个数值,该数值表示缓存在刷新之前将等待的秒数。

  4. 单击“确定”以保存所做更改。

要检索的项数

“跨列表查询结果乘数”设置可控制检索和缓存的项数。由于跨列表查询可为具有不同权限的众多用户检索项目,因此从查询中检索足够多的项目以便所有用户都能看到正确的项目很重要。为确保所有用户都能在安全修整后在查询结果中看到正确的项目,跨列表查询缓存检索的结果必须多于最初请求的结果数。此设置需要一个整数来指定跨列表查询缓存应检索的项数的倍数。

  • 将乘数设置为较大的数值将检索更多项目,但会消耗更多的内存。较大的数值适用于许多用户对其中的不同列表和项目具有特殊权限的网站。

  • 将乘数设置为较小的数值将检索更少的项目并消耗更少的内存。较小的数值适用于用户(如 Internet 网站上的匿名用户)在其中具有相同安全性的网站。

配置跨列表查询结果乘数

  1. 在网站主页的“网站操作”菜单上,指向“网站设置”,然后单击“修改所有网站设置”。

  2. 在“网站设置”页上的“网站集管理”部分中,单击“网站集对象缓存”。

  3. 在“跨列表查询乘数”框中,键入一个指定跨列表查询将检索的项的倍数的数字。

  4. 单击“确定”以保存所做更改。

BLOB 的基于磁盘的缓存

基于磁盘的缓存可控制对二进制大型对象 (BLOB)(如图像、声音、视频文件和代码片段)的缓存。使用基于磁盘的缓存可减少访问 BLOB 时所需的数据库往返行程次数。从数据库检索 BLOB 之后,BLOB 将会存储在 Web 服务器上。后续的请求都从基于磁盘的缓存提供,并根据安全性对这些请求进行修整。

注意事项

  • 可为每个 Web 应用程序配置基于磁盘的缓存的大小。最小值是 1 GB,您可以按千兆字节的倍数增加该缓存的大小。请确保为您的应用程序提供足够的磁盘空间。

  • 您可以设置许多基于磁盘的缓存设置。尤其要注意以下两类设置:

    • Max-age 指定客户端浏览器缓存下载到客户端计算机上的 BLOB 的最长时间(以秒计)。如果自上次下载以来所下载的项目尚未过期,则在缓存过期之前不会重新请求相同的项。Max-age 属性默认情况下设置为 86400 秒(即 24 小时),但也可将其设置为零或更长的时段。将该时间段的值设置得越大,则浏览器获取更新项目所需的时间越长。

    • Path 以正则表达式的形式根据文件扩展名来指定缓存的文件。默认情况下,文件扩展名包括 gif、jpg、png、css 和 js。如果您的网页引用特殊的文件类型,则必须将相应的扩展名添加到缓存中。

  • 基于磁盘的缓存只适用于文档库中的项。如果将资源存储到文档库外部(如网站下的文件夹),那么即使您为整个 Web 应用程序启用了基于磁盘的缓存,也无法通过它管理项目。如果您要控制下载到客户端浏览器的 BLOB 资源的 Max-age 设置,则这一点很重要。默认情况下,存储在 Office SharePoint Server 中的所有项的 Max-age 均设置为零。