目前,在一个非常大的项目中,我不打算将其重新用于另一个站点,我将站点的名称硬编码到各处的文件中。现在,如果我要更改网站名称,则需要付出很大的努力才能在各处进行更改。我知道明显的解决方案是将名称存储为变量或常量,但我想您可以将其称为我的微优化思维方式:我一直认为 PHP 需要解析的事情会少一件。我确实意识到这不会有太大区别,但我只是想知道使用像 APC 这样的操作码缓存是否意味着 PHP 甚至不需要重新解析它?

有帮助吗?

解决方案

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

配置上的任何差异都意味着 很多 更多差异 (例如, apc.stat 对于 APC 来说,选项可能会对服务器的负载产生相当大的影响——并且您所做的任何类似数据库查询的影响都会产生数百倍的影响)

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

  • 这对你有什么好处吗 (纳米优化除外) 让站点名称不被硬编码?
  • 硬编码对你有什么好处吗 (同样的例外) ?

如果两种情况的答案都是“否”,并且您的应用程序可以运行......好吧,这才是最重要的!


如果您有时间进行这种非微观优化,那么最好用分析器检查您的应用程序代码,检查您的数据库查询,以及您为获取静态 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%
  • 但由于没有检查修改,如果要考虑修改,则必须清除缓存


尽管如此,我说的是真的:可能有 地段 您可以优化的东西将意味着比简单的“我应该使用硬编码值”与“我应该使用常量/变量”更重要的收益。

其他提示

这是笏到底会发生..无需进入令牌水平细节...

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

“在这里输入的图像描述”

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

“在这里输入的图像描述”

使用操作码缓存。它会给你更多的性能提升比任何微优化所能。另外,使用Zend OpCache时,大量的优化的是为您完成(例如切换$ I ++到$ I ++当不使用的返回值)。

使用操作码缓存不宜选用了,它将使你能够用很少的努力,从您的硬件得到更多的表现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top