目前在一个我不打算重新用于其他网站的非常大的项目中,我将网站的名称硬编码到各处的文件中。现在,如果我要更改网站名称,则需要花费很多精力才能在任何地方进行更改。我知道显而易见的解决方案是将名称存储为变量或常量,但我想你可以称之为我的微观优化思维方式:我总是认为它将是PHP必须解析的一件事。我确实意识到它没有多大区别,但我只是想知道使用像APC这样的操作码缓存是否意味着PHP甚至不需要重新解析它?
答案 0 :(得分:6)
真的:你不应该关心那样的事情。
配置上的任何差异都意味着更多更多差异(例如,对于APC,apc.stat
选项会对服务器的负载产生相当大的影响 - 而你所做的任何数据库查询都会产生数百倍的影响)
在这里,可能重要的是可维护性:
如果在任何一种情况下答案都是“否”,那么你的申请就可以了......好吧,这才是最重要的!
如果你有时间花在那种微观优化上,那么最好花一些时间来浏览你的应用程序代码,使用分析器,查看数据库查询,获取静态JS / CSS所做的HTTP请求数量。 / images,升级PHP或修改代码,使其可以在PHP 5.3 上运行(因为PHP 5.3带有一些5.2优化),...
所有这些都很可能会让你获得更高的收益; - )
评论后修改:
基本上,当加载PHP文件时:
使用操作码缓存:
apc.stat
选项定义APC是否应检查文件的最后修改日期/时间,以决定使用RAM中的操作码,还是重新编译文件(如果它是RAM中的操作码更新)。
禁用此选项意味着:
不过,我所说的是真的:可能很多你可以优化的东西意味着比简单的“我应该使用硬编码值”更重要的增益而不是“我应该使用常量/变量” ”
答案 1 :(得分:2)
这是完全正确的事情..没有进入令牌级细节......
PHP是一种脚本语言,大多数人认为它是指未编译的语言。虽然这在传统意义上是正确的,因为我们并没有称之为gcc或javac;相反,我们每次请求脚本时都在编译。实际上,PHP和Java编译生命周期非常相似,因为它们都编译为中间指令集(操作码或字节码),然后在虚拟机(Zend VM或JVM)中运行。
解析和编译阶段很慢。当我们添加一个opcache时,我们通过存储解析和编译阶段的结果来短路这个过程,只留下执行一直动态运行。实际上,我们现在更接近Java生命周期;主要区别在于我们保存到共享内存而不是文件,并且如果脚本发生更改,则可以自动重新编译。
使用操作码缓存。与任何可能的微优化相比,它将为您提供更多的性能提升。此外,在使用Zend OpCache时,会为您完成大量优化(例如,在未使用返回值时将$ i ++切换为++ $ i。)
使用操作码缓存不再是可选的,它将使您能够轻松地从硬件中获得更高的性能。