代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

有人能解释一下如何缓存动态PHP页面吗?

  •  2
  • nonopolarity  · 技术社区  · 15 年前

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

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

    4 回复  |  直到 15 年前
        1
  •  3
  •   Peter D    15 年前

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

    如果你说的是在页面上缓存数据,这完全不同。

    看看 Alternative PHP Cache 有关操作码缓存的详细信息。

        2
  •  2
  •   Ben S    15 年前

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

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

        3
  •  1
  •   Community Rick James    7 年前

    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 组件是思想的食物,如果您喜欢所看到的,它是一个很好的实现。

        4
  •  0
  •   AvatarKava    15 年前

    实际上有几种不同的缓存形式。您所指的是由诸如 eAccelerator , MMCache 等。

    虽然这对某些人有帮助,但真正提高性能的地方是实际缓存HTML输出(如果适用),或者缓存用于重复查询的DB结果集(例如 memcache )

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