选择PHP缓存技术:输出缓存到文件与操作码缓存

选择PHP缓存技术:输出缓存到文件与操作码缓存,php,performance,caching,apc,eaccelerator,Php,Performance,Caching,Apc,Eaccelerator,我听说过PHP代码的两种缓存技术: 当PHP脚本生成输出时,它将其存储到本地文件中。再次调用脚本时,它将检查具有以前输出的文件是否存在,如果为true,则返回此文件的内容。它主要是围绕“输出缓冲区”进行的。这篇文章中描述了类似的事情 使用一种操作码缓存插件,编译后的PHP代码存储在内存中。其中最受欢迎的是APC,也是eAccelerator 现在的问题是,使用这两种技术或仅仅使用其中一种技术是否有意义。我认为第一种方法在实现中有点复杂和耗时,而第二种方法似乎很简单,只需要安装模块 我在Ubunt

我听说过PHP代码的两种缓存技术:

  • 当PHP脚本生成输出时,它将其存储到本地文件中。再次调用脚本时,它将检查具有以前输出的文件是否存在,如果为true,则返回此文件的内容。它主要是围绕“输出缓冲区”进行的。这篇文章中描述了类似的事情

  • 使用一种操作码缓存插件,编译后的PHP代码存储在内存中。其中最受欢迎的是APC,也是eAccelerator

  • 现在的问题是,使用这两种技术或仅仅使用其中一种技术是否有意义。我认为第一种方法在实现中有点复杂和耗时,而第二种方法似乎很简单,只需要安装模块

    我在Ubuntu/Debian上使用PHP5.3(PHP-FPM)


    顺便问一下,有没有其他方法可以缓存PHP代码或输出,我在这里没有提到?它们值得考虑吗?

    您应该始终拥有像APC这样的操作码缓存。它的目的是加速代码的解析,并将在将来的版本中捆绑到PHP中。目前,它只需在任何服务器上进行简单安装,不需要编写或更改任何代码

    但是,缓存操作码并不能加快代码的实际执行速度。瓶颈通常是与数据库通信或从磁盘读取数据的时间。缓存程序的输出可以避免不必要的资源使用,并可以将响应速度提高几个数量级

    您可以在堆栈的许多不同位置以多种不同的方式进行输出缓存。正如您所建议的,首先可以在您自己的代码中完成,方法是缓冲输出,将其写入文件,然后在后续请求中读取该文件

    不过,这仍然需要在每个请求上执行PHP代码。您可以在web服务器级别缓存输出,也可以跳过该操作。精心设计一组mod_重写规则将允许Apache在静态文件存在时提供服务,而不是PHP代码,但您必须手动或使用计划任务重新生成缓存版本,因为PHP代码不会在每个请求上运行


    您还可以在web服务器前面粘贴一个代理,并使用它来缓存输出。Varnish现在是一种流行的选择,与在同一台服务器上运行PHP脚本的Apache相比,使用缓存每秒可以处理数百倍的请求。缓存是在代理级别创建和配置的,因此,当缓存过期时,请求将传递到脚本,该脚本将正常运行以生成页面的新版本。

    很多时候,对于PHP web应用程序,数据库是瓶颈。因此,您可以做的最好的事情之一就是将结果缓存到内存中。您还可以使用类似的工具来分析代码,并真正了解最耗时的内容。

    是的,这是两种不同的缓存技术,您已经正确理解了它们

    但要注意1):

    1.)将脚本生成的输出缓存到文件或代理可能会出现问题 如果内容变化迅速

    2.)x-cache也存在,很容易在ubuntu上安装

    问候,,
    /t

    我不知道这是否真的有效,但我遇到了一个PHP脚本的性能问题。我有一个纯文本文件,将数据存储为标题和URL选项卡,每个记录之间用新行分隔。我的脚本在每个URL处获取文件并将其保存到自己的文件夹中。
    然后,我有另一个页面,实际显示本地文件(在本例中为图片),我使用
    preg_replace()
    将每一行的输出从远程url更改为相对url,以便服务器可以显示它。我的制表符分隔文件现在超过1MB,执行
    preg_replace()
    需要几秒钟,所以我决定研究输出缓存。我找不到任何确定的东西,所以我想我会亲自尝试一下,下面是我的想法:

    当我请求页面在本地查看内容时,我尝试从全局范围内的变量读取它。如果该值为空,则可能是此应用程序尚未运行,并且需要填充此全局值。如果为空,则从输出文件(字面上显示要输出的所有内容的纯html文件)读取,并将内容保存到全局变量,然后显示全局变量的输出。
    现在,当脚本运行以更新选项卡分隔的文件时,它将更新输出文件和全局变量。这样,脚本中实际执行缓慢运行的部分只在数据更新时运行

    现在我还没有尝试过,但理论上,这应该会大大提高我的性能,虽然它实际上仍然运行脚本,但数据永远不会过时,我应该得到更好的加载时间


    希望这有帮助。

    你知道,对我来说,optcache、filecache。。etc仅用于减少数据库调用。 他们不能加速你的代码。但是,它们通过使用缓存为访问者提供服务来提高页面负载

    对于我来说,当我需要缓存widgets$object来保存mySQL服务器时,APC对于VPS或专用服务器来说已经足够好了

    如果我有两台以上的服务器,我喜欢使用它们,它们很擅长使用内存进行缓存。然而,这取决于你,不是每个人都喜欢memcached,也不是每个人都喜欢APC

    为了缓存整个网页,我运行了很多wordpress,并在一些缓存插件(如W3Total Cache)上使用了APC、Memcache和Filecache。我明白了(我自己的经验):Filecache适合缓存整个网站,memory cache适合缓存$object

    如果硬盘速度慢,Filecache会增加CPU,如果VPS上没有足够的内存,则内存缓存会非常糟糕

    SSD HDD将是读/写文件的超高速硬盘,