是否有必要缩小PHP?


101

我知道您可以缩小PHP,但是我想知道是否有任何意义。PHP是一种解释型语言,因此运行速度会比编译语言慢一些。我的问题是:客户会在页面加载中看到明显的速度改进吗?

另外,有没有办法编译PHP或类似的东西?


显而易见的一点是混淆,这会使代码的可移植性降低,这可能是一个有效的目标。
约翰(John)

Answers:


161

PHP被编译成字节码,然后在类似于VM的东西上进行解释。许多其他脚本语言遵循相同的通用过程,包括Perl和Ruby。它不是像BASIC这样的传统解释语言。

如果您尝试“缩小”源,则不会有效提高速度。通过使用字节码缓存(如APC),您将获得大幅度的增长。

Facebook引入了一个名为HipHop的编译器,该编译器将PHP源代码转换为C ++代码。PHP专家之一Rasmus Lerdorf在今年早些时候为Digg做了一个演讲,内容涉及HipHop带来的性能改进。简而言之,这并没有比优化代码和使用字节码缓存更快。对于大多数用户而言,HipHop显得过于矫kill过正。

Facebook最近还发布了HHVM,这是一种基于他们制作HipHop的新虚拟机。它仍然是相当新的,尚不清楚是否会为公众带来重大的绩效提升。

为了确保明确说明,请完整阅读该演示文稿。它指出了使用xdebugxhprof等工具(也来自Facebook)进行基准测试和配置文件代码以及识别瓶颈的多种方法。


2
请注意,如果没有外部字节码缓存,整个字节码/ vm东西实际上不会为您带来任何好处。我不明白为什么PHP在默认情况下会一直扔掉字节码...

我认为这是一个共享托管问题。从旧的基于6.0的主干开始,默认情况下APHP包含在PHP中。我不确定我们是否会默认在5.4中看到它,或者新的主干最终被称为...
Charles

非常感谢您提供的信息。不幸的是,我对服务器没有任何控制权(已租用)。Web主机可能使用APC吗?
Bojangles

3
大多数共享主机提供商不使用APC。您应该查看虚拟专用服务器,以便可以控制配置。VPS通常比普通的共享主机贵,但比真正的专用服务器便宜得多。流行的VPS提供商包括Slicehost和Linode。不要忘了,你应该基准和分析你的代码第一
查尔斯

15

放弃将PHP精简的想法,转而使用opcode缓存(如PHP Accelerator或)APC

或其他类似的东西 memcached


18
我说“别的”。
斯蒂芬

3
尚不清楚您的意思不是操作码缓存。
Treffynnon

5
在执行基准测试和性能分析并确定缓存本身将是最大可能的性能提升之后,memcached是提高性能的完美方法。
查尔斯

1
如果您使用的是PHP 5.5,则无需安装任何操作码缓存,因为默认情况下它随附于此。
防火墙

1
其实我抬头cromulent :(我同意别人,用在这方面Memcached是误导性缓存数据作为编译过程的一部分是不一样产生的操作代码。
迈克·珀塞尔

3

通过一些重写(较短的变量名),您可以节省一些字节的内存,但这也很少有意义。

但是,我确实以允许将包含脚本连接在一起的方式设计了一些应用程序。有了php -w它,可以大大压缩,从而为脚本启动增加了一点速度。但是,在启用了操作码的服务器上,这只会保存一些文件mtime检查。


3

这不是广告,而是答案。我正在研究PHP扩展,该扩展可转换Zend操作码以在具有静态类型的VM上运行。它不会加速任意PHP代码。它确实允许您编写比常规PHP允许的运行速度更快的代码。这里的关键是静态类型。在现代CPU上,动态语言会左右左右吃掉分支预测错误的代价。实际上,PHP数组是哈希表也带来了高昂的成本:分支预测错误,缓存使用效率低下,内存预取不佳以及没有SIMD优化。对于当今的处理器而言,分支错误预测和高速缓存未命中尤其是致命弱点。我的小VM通过使用静态类型和C数组而不是哈希表来回避这些问题。结果运行的速度大约快十倍。这是使用字节码解释。该扩展可以选择通过gcc编译函数。在这种情况下,您的速度提高了2至5倍。

这是任何有兴趣的人的链接:

https://github.com/chung-leong/qb/wiki

同样,该扩展不是通用的PHP加速器。您必须编写特定于它的代码。


2

是的,有一个(非技术)要点。

您的托管人可以在他的服务器上监视您的代码。如果您将其缩小并丑化,则间谍很难窃取您的想法。

最小化和丑化php的原因之一可能是间谍保护。我认为uglyfing代码应该在自动部署中迈出一步。


1

有PHP编译器...请参阅前面的问题以获取列表;但是(除非您拥有Facebook的规模,或者将您的应用程序定位为在客户端运行),它们通常比其值得拥有的麻烦要多得多

简单的操作码缓存将为您带来更多的收益。或分析您的代码以识别瓶颈,然后对其进行优化。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.