dereuromark / cakephp-url-cache
CakePHP插件,用于加速URL反向查找
Requires
- php: >=5.4
- composer/installers: *
This package is auto-updated.
Last update: 2024-09-13 10:55:55 UTC
README
适用于CakePHP 2.x
每次在CakePHP视图中使用$this->Html->link()
时,CakePHP路由器必须扫描所有路由,直到找到匹配项。如果页面上有许多链接或使用了大量自定义路由,这可能会很慢。通过将此代码添加到您的AppHelper中,可以对URL进行缓存,从而加快请求速度。缓存设置遵循其他CakePHP核心缓存设置相同的规则。如果调试设置为大于0,则缓存将在10秒后过期。当调试为0时,缓存的有效期为999天。
说明
-
手动将插件下载到
app/Plugin/UrlCache
或通过composer包含。 -
在您的
app/View/Helper/AppHelper.php
顶部放置App::uses('UrlCacheAppHelper', 'UrlCache.View/Helper');
-
在
app/Config/bootstrap.php
中加载并激活插件CakePlugin::load('UrlCache'); Configure::write('UrlCache.active', true);
-
让AppHelper继承UrlCacheAppHelper而不是Helper
class AppHelper extends UrlCacheAppHelper { ... }
-
就这样!只需继续像通常那样使用
$this->Html->link()
或$this->Html->url()
。
配置
默认情况下,所有缓存将存储在一个文件中。这仅适用于链接不多的网站。如果您的网站有大量唯一的URL,您不希望将它们全部存储在一个巨大的缓存中,该缓存需要在每次请求时加载。因此,如果您的特定页面上有大量链接,并且它们包含除了主要URL片段(前缀、插件、控制器、操作)之外的内容,例如分页,您可以设置选项Configure::write('UrlCache.pageFiles', true)
,每个页面将额外保留用于这些唯一URL的单独缓存。只有没有命名或传递参数的控制器/操作URL将存储在全局缓存中。
还有一个Configure::write('UrlCache.verbosePrefixes', true)
参数。如果您在core.php中定义了一些前缀,例如Configure::write('Routing.prefixes', ['admin']);
,并且您主要仍然使用旧的1.2/1.3前缀语法,则此参数很有用
'admin' => true/false
代替
'prefix' => 'admin'
后者更具未来性。
调试
使用事实上的标准调试工具DebugKit,您可以启用一个工具栏面板,允许您查看每个页面视图使用和/或添加了多少链接。要启用它,您可以将它添加到您的$components配置中
public $components = ['DebugKit.Toolbar' => ['panels' => ['UrlCache.UrlCache']]];
基准测试
使用一个小示例脚本,您至少可以近似您(自定义)路由的改进
// In your view ctp: $timeStart = microtime(true); $url = ['controller' => 'posts', 'action' => 'view']; for ($i = 0; $i < 10000; $i++) { $u = $url; $u[] = $i; $link = $this->Html->link($i, $u); } $timeEnd = microtime(true); $time = $timeEnd - $timeStart; debug($time);
在我的第一次测试中,第一次请求需要9秒,第二次击中只需1秒。所以总的来说,速度提升可以大约是10倍更快。但这确实取决于您的页面和URL的动态性。上述10,000个链接不是一个现实场景,所以与整个分发器过程相比,整体速度提升通常会少得多。因此,您绝对应该查看其他瓶颈,通常是数据库、opcache缓存和分发速度。