2009-05-19 61 views
2

我想知道如何缓存动态PHP页面。是否真的需要预编译PHP代码并将其存储在字节码中?类似于Python的.pyc,它是一个更加编译和准备好执行的版本,所以如果系统发现.pyc文件比.py文件更新,那么它就不会费心去重新编译为.py文件。有人可以解释一点关于缓存动态PHP页面吗?

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

回答

3

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

如果你正在谈论缓存页面上的数据本身,这是完全不同的东西。

有关操作码高速缓存的更多信息,请参阅Alternative PHP Cache

+0

因此,如果我在我的命令提示符上运行PHP程序,我可以问预编译的版本是否会生成,因此下次不需要编译? – 2009-05-19 17:03:11

2

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

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

0

实际上有几种不同的缓存形式。你所指的是通过如eAccelerator,MMCache等包来处理。

虽然这将有助于一些你真的会得到性能提升的地方,实际上是在适当的时候缓存HTML输出,或者在缓存数据库结果集用于重复查询(类似memcache)。

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

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如果你喜欢你所看到的东西,组件就是思想和伟大的实现。

相关问题