PHP操作码缓存的基础知识(Basics of PHP opcode cache)

2019-08-16 15:43发布

目前一个非常大的项目,我不打算再使用的其他网站,我有网站的名称硬编码到文件中无处不在。 现在,如果我是以往任何时候更改网站名称,将采取了很多的努力来改变这种无处不在。 我知道明显的解决方法就是名字存储为一个变量或常量,但我想你可以把它的思维我的微优化的方式:我总是想这将是一个少一点PHP具有解析。 我不知道它会不会带来多大的改变,但我只是想知道是否使用码缓存APC一样将意味着PHP甚至不必重新解析?

Answer 1:

真正做到:你不应该在乎这样的事情。

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

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

  • 它让你的任何利益(除了从纳米优化)有网站名称不是硬编码?
  • 它让你有它硬编码的任何好处(同除外)?

如果答案是“否”,在这两种情况下,你的应用程序的工作......嗯,这是最重要的!


如果你有时间的那种小于微的优化来消费,它可能会更好地用执行应用程序代码会与探查,会通过你的数据库查询,HTTP请求的数量,你正在做的抓取静态JS / CSS /图片,PHP升级或修改您的代码,以便它可以在PHP 5.3运行(如PHP 5.3附带了一些优化技术超过5.2),...

所有这些将最有可能给你一个较高的增益;-)


注释后编辑:

基本上,当一个PHP文件被加载:

  • 该文件是从磁盘读取
  • 它的解析和编译操作码
  • 操作码被执行

随着操作码缓存:

  • 如果在包含操作码RAM的地方,那些从RAM加载(是,没有一个文件的阅览,也不解析/编译)
    • 如果不是,请参阅步骤之前 - 只需添加一个“存储操作码到RAM”执行前,为下一个请求
  • 和操作码被执行

apc.stat选项定义APC是否应该检查文件的最后修改日期/时间使用的操作码从RAM之间作出选择,或重新编译的文件,如果它是更近的,在RAM中的操作码。

禁用此选项意味着:

  • 文件不检查磁盘=>更快,占用资源少
    • 举例来说,我已经看到了CPU负荷的下降,10和15%之间,禁用加载相当的服务器上此选项时
  • 但由于没有检查进行修改,如果要考虑到的修改,你必须清除缓存


不过,我说的是真的:有可能是很多事情你可以优化,这将意味着比简单的“我应该用硬编码值”与更重要的收获:“我应该使用常量/变量”。



Answer 2:

这是笏到底会发生..没有进入令牌级别的详细信息...

PHP是一种脚本语言,大多数人采取意味着它不会被编译。 虽然这是事实在在传统意义上,我们不调用GCC或javac的; 相反,我们正在编制每次请求脚本时。 事实上,PHP和Java编译的生命周期很相似,因为它们都编译成中间指令集(操作码,或字节码),然后将其在虚拟机中运行(Zend的VM或JVM)。

解析和编译阶段是缓慢的。 当我们添加一个opcache,我们短路这个过程中通过存储的解析和编译阶段的结果,只留下执行,以一如既往的动态运行。 实际上,我们更接近现在在Java生命周期; 同是,我们保存到共享内存,而不是一个文件,如果发生变化的脚本可以自动重新编译的主要区别。

使用操作码缓存。 它会给你更多的性能提升比任何微优化所能。 此外,使用Zend OpCache时,很多优化工作是为你做(如开关$ I ++来++ $ i的未使用的返回值时)。

使用操作码缓存不宜选用了,它将使你用很少的努力让您的硬件更高的性能。



文章来源: Basics of PHP opcode cache