页面载入中...

简评 WordPress 缓存插件(续:WP Super Cache 篇)

针对 Aw Guo 提出的问题,我做了个小试验:

1、建立一个干净的 WordPress 站点,设置 Permalink 格式为 /post/%postname%.html

2、安装最新版的 WP Super Cache 并将其激活,设置状态为 ON,并按照说明修改两处 .htaccess

3、通过浏览器访问首页、唯一的单篇日志、About 页面使 WP Super Cache 生成这三个页面的缓存,在 /wp-content/cache/ 目录下可以看到三个以 wp-cache- 起始、以 .html 结尾的 HTML 文件,其中内容分别为完整的页面源代码,注意到末尾均含有 WP Super Cache 字样的注释

4、完整复制整个 /wp-content/cache/ 目录内容到 /wp-content/cache2/

5、禁用 Super Cache 插件,注意到此时 /wp-content/cache/ 目录下所有缓存文件及此目录下的 .htaccess 文件被删除,但 /.htaccess 文件没有变化,其中内容仍然含有 WP Super Cache 的 RewriteRules

6、重命名 /wp-content/cache2/ 目录为 /wp-content/cache/

7、再次通过浏览器访问首页、唯一的单篇日志、About 页面并分别查看其源代码,发现末尾并没有包含 WP Super Cache 字样的注释

结论:

1、WP Super Cache 确实生成了完全静态化的页面缓存(之前我错了)

2、WP Super Cache 并没有通过 /.htaccess 文件中的 RewriteRules 来访问页面对应的缓存,而很可能是通过 WP Super Cache 插件本身的 PHP 代码进行重定向,或者对缓存数据进行读取(有待于进一步验证,WP Super Cache 代码比较多,懒得细看了)

3、Hyper Cache 轻松打败 WP Super Cache 的说法不准确,二者的性能应该处于同一量级,但究竟孰优孰劣,有待于更严谨、更精确的实验数据来证明

4、WP Super Cache 与 Hyper Cache 类似,要起到缓存的作用仍然依赖于 WordPress 插件机制,无法像 cos-html-cache 那样彻底绕过 WordPress

20条留言. 发言 or Trackback

  • Aw+Guo  22:08 Feb 28, 2009 

    辛苦了,我没有做这个实验,我也不清楚为什么会没有那个注释,但我想,PHP无法阻碍htaccess吧?

  • 北极冰仔  22:16 Feb 28, 2009 

    @Aw+Guo PHP 是运行于 Apache 之上的一个模块,它的优先级肯定低于 Apache 本身的 .htaccess,现在的问题就在于:WP Super Cache 写在 .htaccess 中的规则并没有包含控制页面请求重定向至缓存的语句;另外,如果在 .htaccess 中定义了将所有页面请求重定向至缓存文件本身,那样我们在访问该页面时应该会发现地址栏中显示的 URL 实际上变成了缓存文件的 URL,所以我推测,WP Super Cache 缓存机制应该和 Hyper Cache 类似,是借助于 PHP 代码读取文件流。

  • Raymond  22:48 Mar 01, 2009 

    @北极冰仔

    :em16: 敢于如此坦诚的把比较的测试报告拿出来,很钦佩。

    cos-html我已经放弃了,因为总是出问题,譬如有时无法评论,譬如post-views无法使用,总会有这样那样的问题。

    我现在改用super-cache了。希望将来Hyper-cache升级后,能真正打败super-cache,打造国人wp插件品牌。继续努力,关注ing!

  • 睡到自然醒blog  23:40 Mar 01, 2009 

    很有实验精神哈。 :em10:

  • 北极冰仔  08:44 Mar 02, 2009 

    @Raymond
    cos-html-cache 插件适用条件确实有点苛刻,实不相瞒,我曾经也是装了卸,卸了再装,如此反反复复(站内搜索 cos-html-cache 可能会看到),你说的没错,总有这样那样的问题让人不满意,直到后来自己也折腾累,也想通了,放弃了一些花哨的动态功能,重新用上 cos-html-cache 直到现在。 :em17:

  • 海妖的夜  21:37 Mar 02, 2009 

    博主似乎没有仔细看super-cache的rewrite语句,它是说在存在cookie的条件下将会重定向到super-cache目录下对应站点的缓存文件.
    换言之,位于cache目录下的以wp-cache开头的缓存文件并不是对应rewrite语句的,很明显这些文件是php文件流定向的.所以禁用super cache后不会采用cache目录下的文件.

    我用super cache总会遇到各种问题, 主要是我不想把我的缓存文件删掉, 但总是不如意,改了些代码也没有得到我想要的行为.
    现在发现还是hyper cache好用些.

    cos-html-cache对mu的支持实在是有问题, 光说生成首页html文件这个,对于mu来说会造成混乱.

    在这里问问,博主侧边栏最上面的通过 RSS 订阅的下拉框是什么widget?还是插件?可否告知名字?

  • 北极冰仔  21:49 Mar 02, 2009 

    @海妖的夜 说了这么半天,我和你是同一个意思啊,那些缓存文件肯定不会是通过 RewriteRules 重定向的,只是通过 PHP 读取文件流罢了。(见第 2 条留言)

    Hyper Cache 从结构上来说就比 Super Cache 简单得多吧,代码几乎就是 cos-html-cache 的翻版(夸张了点,但真的很像,虽然也有不小的差异),另外你提到 WordPress MU 的问题,这个我没有考虑过,毕竟我这里只是一个 personal blog,也没想到为其他人提供 MU 服务,所以……一句话概括:cos-html-cache 对我来说就是最佳选择。

    那个 RSS 订阅下拉框就是最普通的 HTML 代码,不需要任何插件、Widget。

  • atp  12:33 Apr 09, 2009 

    怎么我设置super-cache后,留言不能立即显示,怎么改配置呢?

  • 北极冰仔  14:32 Apr 09, 2009 

    @atp 貌似 Super Cache 会自动处理这种情况的吧?刷新下浏览器应该可以看到吧。

  • Zack  03:38 Apr 15, 2009 

    4、WP Super Cache 与 Hyper Cache 类似,要起到缓存的作用仍然依赖于 WordPress 插件机制,无法像 cos-html-cache 那样彻底绕过 WordPress

    意思是說: cos-html-cache優於WP Super Cache 与 Hyper Cache嗎???

  • 北极冰仔  08:56 Apr 15, 2009 

    @Zack 在这个方面 cos-html-cache 有绝对优势。

  • 止戈  20:56 Jul 02, 2009 

    用这个插件好像在手机上访问有些问题,弄了不到半小时就被我反安装了

  • moregatest  15:39 Jul 16, 2009 

    緩存文件的確是透過rewrite去訪問的 並不需要經過php
    我來解釋一下 super-cache的rewrite條件吧

    RewriteCond %{REQUEST_METHOD} !=POST #如果不是POST
    RewriteCond %{QUERY_STRING} !.*=.* #如果不是GET
    RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress|wp-postpass_).*$ #如果cookie裡面 沒有wordpress等字樣
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html -f #如果該文件緩存檔案存在
    RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html [L] #導引到該緩存輸出之

    除非該文件不存在 這條件才會往下走 經過php才有機會被執行

  • ilank  02:26 Sep 19, 2009 

    呃,我也在选择中,看哪种好

  • 用户  15:14 Oct 04, 2009 

    不错的插件,效果如何

  • Louis Han  13:17 Oct 09, 2009 

    看着有些迷糊 暂时不做实验了

  • alpha2beta  06:23 Nov 14, 2009 

    我的理解是WP Cache生成的半静态页面的页面源码的最后是像下面这样的注释


    如果是WP Super Cache模式生成的完全静态页面最后会多

    在Cache目录下能找到分别对应的html文件。

    我不明白的是在有RewriteRule的情况下,为什么有时还是没有调用完全静态页面

  • 浪莎袜子  16:01 Dec 10, 2009 

    :em00: 我看着有些迷糊 暂时不做实验了

  • 外汇开户  16:02 Dec 10, 2009 

    :em24: 看着有些迷糊 暂时不做实验了

  • fxpro外汇  19:32 Jan 15, 2010 

    好东西啊。。。

留言 ↓

欢迎回来, (修改)

  • :em19:
  • :em01:
  • :em25:
  • :em09:
  • :em11:
  • :em00:
  • :em13:
  • :em08:
  • :em10:
  • :em03:
  • :em02:
  • :em05:
  • :em07:
  • :em16:
  • :em27:
  • :em14:
  • :em21:
  • :em20:
  • :em24:
  • :em18:
  • :em17:
  • :em06:
  • :em23:
  • :em12:
  • :em22:
  • :em15:
  • :em26:
  • :em04:

正在提交数据...

3 Pingbacks & Trackbacks