goldfinch/silverstripe-dynamiccache

基于Silverstripe模块的动态内容简单即时缓存分支

安装: 5

依赖关系: 0

建议者: 0

安全性: 0

星星: 0

关注者: 0

分支: 27

类型:silverstripe-vendormodule

v6.0.0 2024-03-12 20:13 UTC

This package is auto-updated.

Last update: 2024-09-12 21:08:27 UTC


README

此模块无缝且稳健地缓存页面内容,允许后续请求绕过服务器繁重操作,如数据库访问。

致谢及作者

要求

  • SilverStripe 3.1.7 或更高版本
  • PHP 5.4

工作原理

当访客请求页面时,模块将尝试在发起数据库连接之前返回任何缓存的页面内容/自定义标题。如果存在缓存的副本并可以返回,则可以节省大量处理开销。

如果不存在缓存的副本,则页面将正常处理,然后将结果保存以供后续页面请求使用。

这与StaticPublisher或StaticExporter不同,因为没有管理缓存。缓存是在每次页面请求的基础上增量完成的,而不是预先完成的。这将在多个请求之间分配缓存任务,仅在非缓存的请求中增加微小的开销,但在管理层面可以节省大量时间。

为了稳健性,在页面发布时将清除整个缓存。

此模块允许通过指定某些标题使单个页面退出缓存,并且将忽略ajax页面或直接请求控制器(包括表单提交)的缓存,通过检查任何以大写字母开头的URL段。

安装说明

  • 将模块提取到dynamiccache文件夹中,或使用composer安装
composer require "tractorcow/silverstripe-dynamiccache" "4.2.*"
  • 编辑您的 .htaccess(或web.config等)以将请求重定向到dynamiccache/cache-main.php文件,而不是框架/main.php文件
RewriteRule .* dynamiccache/cache-main.php?url=%1&%{QUERY_STRING} [L]

配置选项

可以通过Silverstripe内置的常规配置系统进行配置。有关可配置选项的列表,请参阅dynamiccache.yml

  • enabled - (布尔值) 全局覆盖。将其设置为false以关闭缓存。
  • optInHeader - (null|string) 如果应该使用标题来启用缓存,请在此处设置将匹配指定标题的正则表达式。
  • optOutHeader - (null|string) 如果应该使用标题显式禁用缓存的缓存,请在此处设置将用于匹配指定标题的正则表达式。例如,'/^X-DynamicCache-OptOut/'
  • optInResponseCodes - (null|array) 应缓存的状态代码
  • optOutResponseCodes - (null|array) 不应缓存的状态代码
  • responseHeader - (null|string) 用于报告缓存结果的头前缀
  • optInURL - (null|string) 如果缓存应仅限于指定URL,请在此处设置将用于匹配这些URL的正则表达式
  • optOutURL - (null|string) 如果应禁用指定URL的缓存,请在此处设置将用于匹配这些URL的正则表达式。例如,'/(^/admin)|(/[A-Z])/'
  • segmentHostname - (布尔值) 确定是否应针对不同的主机名进行缓存分离。如果运行在为不同主机名提供不同内容但仍然使用相同后端(如subsites模块)的系统上,则非常重要。
  • enableAjax - (布尔值) 确定是否应在ajax期间启用缓存
  • cacheDir - (字符串) 文件缓存存储的目录(可以是绝对路径或相对于 TEMP_FOLDER 的相对路径)。允许使用 %BASE_PATH% 和 %ASSETS_PATH% 占位符。请确保该文件夹位于 webroot 之外,或者适当进行安全保护。
  • cacheDuration - (null|整数) 页面缓存的持续时间,以秒为单位(默认为 1 小时)。
  • cacheHeaders - (null|string) 确定哪些头部信息应该被缓存。X-Include-CSS 等相关头部信息对于指导前端包含特定的资源文件至关重要。例如 '/^X-/i'
  • cacheBackend - (null|string) 如果您希望覆盖缓存配置,则更改此值为另一个后端,并在 _config 文件中初始化一个新的 SS_Cache 后端

缓存清除

默认情况下,当 SiteTree 或 SiteConfig 对象被更新或删除(包括发布或取消发布)时,缓存将被清除。这将一次性清除整个缓存。

为了在其它情况下触发额外的缓存清除,可能有必要在其他情况下清除此缓存。

如果需要在对象更改时进行此操作,应将 DynamicCacheDataObjectExtension 扩展添加到该类型。

如果响应于条件或与数据对象无关的操作,则可以使用以下代码显式清除缓存

DynamicCache::inst()->clear();

此外,如果您已登录(或在开发模式中),可以通过添加 'cache=flush' 查询参数来清除缓存。例如:

http://www.app.com/?cache=flush

自定义缓存行为

如果您扩展了 DynamicCache,可以钩入两个额外的方法。可以使用辅助扩展类 DynamicCacheExtension 来开始。

以下示例将允许在设置了某个会话值时绕过缓存,并将缓存在移动/非移动用户之间进行分割(假设已安装 silverstripe/mobile 模块)。

	class CacheCustomisation extends DynamicCacheExtension {
		public function updateEnabled(&$enabled) {
			// Disable caching for this request if a user is logged in
			if (Member::currentUserID()) $enabled = false;

			// Disable caching for this request if in dev mode
			elseif (Director::isDev()) $enabled = false;

			// Disable caching for this request if we have a message to display
			// or the request shouldn't be cached for other reasons
			elseif (Session::get('StatusMessage') || Session::get('Uncachable')) $enabled = false;
		}

		public function updateCacheKeyFragments(array &$fragments) {
			// For any url segment cache between mobile and desktop devices.
			$fragments[] = MobileBrowserDetector::is_mobile() ? 'mobile' : 'desktop';
		}
	}

许可

版权 (c) 2013, Damian Mooyman。保留所有权利。

保留所有权利。

在满足以下条件的情况下,允许重新分发和使用源代码和二进制形式,无论是否修改:

  • 源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。
  • 二进制形式的重新分发必须在文档和/或其他随分发提供的材料中复制上述版权声明、本条件列表和以下免责声明。
  • 未经具体事先书面许可,不得使用 Damian Mooyman 的姓名来认可或推广由此软件派生的产品。

本软件按“现状”提供,并附带所有明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性的暗示保证。在任何情况下,版权所有者或贡献者不对任何直接、间接、偶然、特殊、示范性或后果性的损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论此类损害是否因本软件的使用或本软件使用可能性而引起,即使已告知此类损害的可能性。