noflash/supercache-bundle

此软件包已被废弃且不再维护。未建议替代软件包。

用于 Symfony 的 Supercache 扩展包

安装: 661

依赖: 0

建议者: 0

安全: 0

星标: 2

关注者: 1

分支: 1

开放问题: 0

类型:symfony-bundle

dev-master / 1.0.x-dev 2021-02-04 04:23 UTC

This package is auto-updated.

Last update: 2021-03-04 04:30:25 UTC


README

该项目源于多年前加快页面渲染速度的需求。现在,我们拥有更好的技术(CDN、HTTP/2、SPA)来处理这个问题。代码应该与 Symfony 2 & 3 兼容,但需要升级以支持 Symfony 的新版本。

该项目保留在此,以供仍在使用它的遗留应用程序以及作为历史资料。

Supercache 扩展包

Symfony 框架的静态页面缓存。

什么是 Supercache?

有些人可能对简单页面的加载时间感到烦恼——这正好像我一样。针对这个问题有很多解决方案——这是一个极端的方案。如果你曾经使用过 WordPress,你可能见过 WP Super Cache 插件。这个扩展包基于类似的原则构建(但与该插件没有关联)。

基本上,SupercacheBundle 缓存整个对静态文件的响应,并以零成本提供服务。这对于有很多静态路由经常访问的页面非常有用。

安装

在您开始使用此扩展包之前,您应该仔细阅读 Symfony 烹饪书中的 HTTP 缓存章节——它提供了一堆关于缓存的优秀技术和技巧。

扩展包可以像其他任何 Symfony 扩展包一样安装。

  1. 打开命令行,进入您的项目目录,并执行以下命令
    composer require noflash/supercache-bundle
  2. 通过向 app/AppKernel.php 文件中添加以下行来启用扩展包
<?php
// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...

            new noFlash\SupercacheBundle\SupercacheBundle(),
        );

        // ...
    }

    // ...
}
  1. 执行以下命令并遵循屏幕上的说明 app/console supercache:install 目前需要手动安装。您应该在根目录中创建 webcache 目录,然后执行以下部分中描述的故障排除部分的前两个步骤。

配置

待定 默认配置

supercache:

    # Enable/disable cache while running prod environment
    enable_prod:          true

    # Enable/disable cache while running dev environment
    enable_dev:           false

    # Cache directory, must be http-accessible (so it cannot be located under app/)
    cache_dir:            '%kernel.root_dir%/../webcache'

    # Enable/disable adding X-Supercache header
    cache_status_header:  true

故障排除

安装命令失败: 无法创建缓存目录

看起来指定的缓存目录无法创建。可能是权限相关的问题。您可以尝试自己创建它。为此,只需创建所需的缓存目录(默认设置为 ./webcache/)。接下来,将以下内容放入缓存目录内的 .htaccess 文件中

RemoveHandler .php
RemoveType .php
Options -ExecCGI

<IfModule mod_php5.c>
    php_flag engine off
</IfModule>

<IfModule mod_headers.c>
    Header set Cache-Control 'max-age=3600, must-revalidate'
</IfModule>

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/html A3600
</IfModule>

<IfModule mod_mime.c>
    AddType application/javascript .js
    AddType text/html .html
    AddType application/octet-stream .bin
</IfModule>

安装命令失败: 无法修改 .htaccess (...)

如果您(或某些其他扩展包)修改了 web/.htaccess 文件,安装程序可能无法自动应用所需更改。您可以手动添加以下行——它们应放置在 RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L](或类似)下面

### >>>SUPERCACHE BUNDLE 
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD) [OR]
RewriteCond %{QUERY_STRING} !^$
RewriteRule . - [S=3]

RewriteCond %{DOCUMENT_ROOT}/../webcache/$1/index.html -f
RewriteRule ^(.*) %{DOCUMENT_ROOT}/../webcache/$1/index.html [L]

RewriteCond %{DOCUMENT_ROOT}/../webcache/$1/index.js -f
RewriteRule ^(.*) %{DOCUMENT_ROOT}/../webcache/$1/index.js [L]

RewriteCond %{DOCUMENT_ROOT}/../webcache/$1/index.bin -f
RewriteRule ^(.*) %{DOCUMENT_ROOT}/../webcache/$1/index.bin [L]
### <<<SUPERCACHE BUNDLE

请注意,缓存路径需要调整。路径相对于 web/ 目录。

我的服务器不支持 .htaccess

您有两个选择:将(如上所述)的重写规则翻译成您所使用的服务器支持的格式,或者使用 PHP-PULL 模式。SupercacheBundle 包含了对没有 .htaccess 支持的服务器的回退模式(例如,使用 app/console server:run 命令启动的 CLI 服务器)。此模式通过附加到 Symfony HTTP 内核并尝试定位给定请求的缓存响应来工作。当然,它也有代价 - 回退将运行 PHP 解释器和初始化框架的核心。在我的测试中,DIRECT 模式返回响应的时间为 3-5 毫秒,而 PHP-PULL 模式需要大约 30 毫秒。

启用 PHP-PULL 不需要更改任何配置选项。

常见问题解答(FAQ)

所有的响应都会被缓存吗?

不,请求和响应必须满足某些条件才能被缓存

  • GET 请求方法
  • 没有查询字符串
  • 响应代码在 200 到 300 之间(不包括 204)
  • 没有 privateno-store 缓存控制指令
  • 路由没有被标记为排除(详细信息请见 #3)

有什么限制吗?

是的,有一些限制

  • 无法在 /sandbox/sandbox/ 上提供不同的内容
  • 您不能有 ... 的路由(它们在 HTTP RFC 中本来就是非法的)
  • 没有自动检查身份验证令牌(如果您展示的是用户特定的信息,那么设置 private 缓存策略是您的责任)
  • 由于性能原因,文件以以下 MIME-Types 之一从缓存中提供:text/html、application/javascript 或 application/octet-stream。有关详细信息,请参阅 问题 #2