PHP操作码缓存的基础知识

Jas*_*vis 2 php optimization opcode-cache apc

目前,在一个我不打算重新用于其他网站的非常大的项目中,我将网站的名称硬编码到各处的文件中.现在,如果我要更改网站名称,则需要花费很多精力才能在任何地方进行更改.我知道显而易见的解决方案是将名称存储为变量或常量,但我想你可以称之为我的微观优化思维方式:我总是认为它将是PHP必须解析的一件事.我确实意识到它没有多大区别,但我只是想知道使用像APC这样的操作码缓存是否意味着PHP甚至不需要重新解析它?

Pas*_*TIN 6

真的:你不应该关心这样的事情.

在配置将任何差异意味着很多更差(例如,在apc.stat选项,APC,可以对你的服务器的负载相当的影响-而像DB查询事情你做将有数以百计的时间更有冲击力)

在这里,可能重要的是可维护性:

  • 它能为您带来任何好处(除了纳米优化),让网站名称不是硬编码的吗?
  • 让它硬编码(相同的例外)会给你带来什么好处吗?

如果在任何一种情况下答案都是"否",那么你的应用程序就可以了......好吧,这才是最重要的!


如果你有时间花在那种微观优化上,那么最好花一些时间来浏览你的应用程序代码,使用分析器,查看数据库查询,获取静态JS/CSS所做的HTTP请求数量./images,升级PHP或修改你的代码,以便它可以在PHP 5.3上运行(因为PHP 5.3带有一些优于5.2的优化),...

所有这些都很可能会让你获得更高的收益;-)


评论后编辑:

基本上,当加载PHP文件时:

  • 从磁盘读取文件
  • 它被解析并编译为操作码
  • 执行操作码

使用操作码缓存:

  • 如果RAM中有一个包含操作码的地方,那些是从RAM加载的(没有读取文件,也没有解析/编译)
    • 如果没有,请参阅之前的步骤 - 在执行之前添加"将操作码存储到RAM",以用于下一个请求
  • 并执行操作码

apc.stat选项定义APC是否应检查文件的最后修改日期/时间,以决定使用RAM中的操作码,还是重新编译文件(如果它更新近RAM中的操作码).

禁用此选项意味着:

  • 磁盘上没有检查文件=>更快,并且使用的资源更少
    • 例如,在相当负载的服务器上禁用此选项时,我看到CPU负载下降了10到15%之间
  • 但由于没有检查修改,如果要将修改考虑在内,则必须清除缓存


不过,我所说的是真的:可能有很多东西你可以优化,这意味着比一个简单的"我应该使用硬编码值"而不是"我应该使用常量/变量"更重要的收益.