dereuromark/cakephp-url-cache

CakePHP插件,用于加速URL反向查找

安装次数: 117,142

依赖项: 0

建议者: 0

安全: 0

星级: 24

关注者: 4

分支: 20

开放问题: 0

类型:cakephp-plugin

1.0.0 2015-04-15 10:05 UTC

This package is auto-updated.

Last update: 2024-09-13 10:55:55 UTC


README

Build Status Latest Stable Version Coverage Status Minimum PHP Version License Total Downloads

适用于CakePHP 2.x

每次在CakePHP视图中使用$this->Html->link()时,CakePHP路由器必须扫描所有路由,直到找到匹配项。如果页面上有许多链接或使用了大量自定义路由,这可能会很慢。通过将此代码添加到您的AppHelper中,可以对URL进行缓存,从而加快请求速度。缓存设置遵循其他CakePHP核心缓存设置相同的规则。如果调试设置为大于0,则缓存将在10秒后过期。当调试为0时,缓存的有效期为999天。

说明

  1. 手动将插件下载到app/Plugin/UrlCache或通过composer包含。

  2. 在您的app/View/Helper/AppHelper.php顶部放置

    App::uses('UrlCacheAppHelper', 'UrlCache.View/Helper');
  3. app/Config/bootstrap.php中加载并激活插件

    CakePlugin::load('UrlCache');
    
    Configure::write('UrlCache.active', true);
  4. 让AppHelper继承UrlCacheAppHelper而不是Helper

    class AppHelper extends UrlCacheAppHelper {
        ...
    }
  5. 就这样!只需继续像通常那样使用$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缓存和分发速度。