有人可以解释一下缓存动态PHP页面吗?

时间:2009-05-19 16:54:30

标签: php caching webserver

我想知道如何缓存动态PHP页面。它真的是关于预编译PHP代码并将其存储在字节码中吗?类似于Python的.pyc,它是一个更加编译并且可以执行的版本,因此如果系统发现.pyc文件比.py文件更新,那么它就不会重新编译为.py文件

PHP缓存主要是关于这个吗?有人可以提供更多关于此的信息吗?

4 个答案:

答案 0 :(得分:3)

取决于您所谈论的缓存类型。操作码缓存与您所说的完全一样。它采用操作码并对其进行缓存,以便每当用户访问特定页面时,如果其编码已经编译并且在缓存中,则不需要重新编译该页面。如果你修改一个php文件,缓存机制将检测到这个并重新编译代码并将其放入缓存中。

如果您正在谈论缓存页面本身的数据,则完全不同。

有关操作码缓存的更多信息,请查看Alternative PHP Cache

答案 1 :(得分:2)

你所描述的是PHP accelerator,他们完全按照你的说法行事;存储缓存的已编译字节码,以便同一脚本的多次执行只需要一次编译。

还可以缓存执行PHP脚本的结果。这通常需要至少一点逻辑,因为页面的内容可能在缓存后发生了变化。例如,您可以查看general cache feature provided by CodeIgniter

答案 2 :(得分:1)

Peter D's answer很好地涵盖了操作码缓存。如果您的页面很简单,这可以节省超过50%的页面生成时间(主观)!

您想要了解的其他缓存是数据缓存。这可能是缓存数据库结果集,Web服务响应,HTML块甚至整个页面!

一个简单的“例子”应该说明:

    $cache = new Cache();
    $dataset;

    if (!$dataset == $cache->get('expensiveDataset')){

      //run code to fetch dataset from database
      $dataset = expensiveOperation();
      $cache->set('expensiveDataset', $dataset);

    }
echo $dataset; //do something with the data

有一些库可以帮助对象,函数和页面级缓存。 Zend Framework's Zend_Cache组件是值得深思的,如果你喜欢你所看到的,那就是一个很好的实现。

答案 3 :(得分:0)

实际上有几种不同形式的缓存。您所指的内容由eAcceleratorMMCache等软件包处理。

虽然这会有所帮助,但实际上可以提升性能的是实际缓存HTML输出(如果适用),或缓存数据库结果集以进行重复查询(类似memcache)。

安装任何操作码缓存机制非常简单,但我引用的其他两个缓存区域将为您带来更大的性能优势。