sunshineup/silverstripe-dynamiccache

基于 Silverstripe 模块的动态内容即时缓存

安装: 3,093

依赖: 0

建议者: 0

安全性: 0

星星: 3

关注者: 4

分支: 27

类型:silverstripe-vendormodule

6.0.0 2023-07-11 01:33 UTC

This package is auto-updated.

Last update: 2024-09-11 08:27:53 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 文件而不是 framework/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|字符串) 确定哪些头也应该被缓存。X-Include-CSS 等相关头对于指导前端包含特定的资源文件是必不可少的。例如:'/^X-/i'
  • cacheBackend - (null|字符串) 如果您希望覆盖缓存配置,则将其更改为另一个后端,并在您的 _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 的名字来认可或推广源自本软件的产品。

本软件由版权所有者和贡献者按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证。在任何情况下,无论是否已告知此类损害的可能性,都不承担任何直接、间接、偶然、特殊、示范性或后果性的损害赔偿责任(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断),无论此类损害是基于合同、严格责任还是侵权(包括疏忽或其他),即使是在使用本软件时发生的。