1.媒体来源:
iThome
2.完整新闻标题:
【专访PHP之父】PHP 7效能翻倍关键大揭露
3.完整新闻内文:
在Facebook推出HHVM后,引出许多重视PHP效能表现的使用者,让PHP之父Rasmus Lerdorf
意识到许多使用者有效能表现的需求,他开始思考如何将HHVM的JIT架构与PHP融合
20岁老牌网页程式语言PHP,最快将在10月底释出PHP 7新版,这是十年来的首次大改版,
最大特色是在效能上的大突破,能比前一版PHP 5快上一倍,PHP之父Rasmus Lerdorf表示
,甚至能比HHVM虚拟机器下的PHP程式效能更快。
HHVM是脸书为自家网站特性而量身客制的PHP优化机制,不见得适用任何网站。但Rasmus
Lerdorf表示,新版目标之一就是要让任何网站开发者,就连使用开发框架Drupal、开源
电子商务系统Opencart时,都能有不输使用HHVM技术的效能。在新版发表前夕,他也趁来
台参加PHPConf Taiwan年会时,分享PHP 7效能大突破的关键。
一个20年来历经了多次改版和无数次优化的成熟语言,还能有效能提高一倍的突破绝非易
事,Rasmus Lerdorf坦言,不像一般新专案多半容易找出许多改进空间,新版PHP并非修
改部分程式就达到了如此的成果。反而是,透过大量细节优化和效能累加后,PHP 7才具备
了不输HHVM的执行效能。
Rasmus Lerdorf与PHP核心贡献团队花了许多心力减少程式运作时搬动的内存位元数,由
此加速执行的效能。例如,PHP中储存变量的资料架构zval从24位元缩减至16位元、
Hashtable从72位元减少至56位元,并检视PHP中的函式,思考有无任何改进效能的空间。
除了从减少内存的使用着手外,Rasmus Lerdorf更检视CPU的Cache line的运作原理,了
解程式码如何与CPU互动、编译器如何在新CPU架构下编译程式码等细节,确保PHP 7的程式
码符合现代CPU的架构。虽然每个项目的优化对效能贡献都低于0.5%,但由于优化的项目很
多,或是某项改善的功能会被应用程式反复呼叫,整体修正的综效结果就能有如此大的进
展。
受HHVM刺激,决定打造兼具效能与功能的PHP
Facebook为了优化PHP运作,搭配JIT编译而打造出虚拟机器HHVM。而HHVM虽然拥有快速的
执行效能,其为特定用途优化的设计,只能满足小部分的开发者。反之,Rasmus Lerdorf
除了想提升PHP的效能表现外,也想要同时满足高端使用者以及业余使用者的需求,让PHP
7成为兼备效能表现及通用功能的程式语言。
然而,开发符合市场上少部分人使用的程式语言并不是难事,但是PHP专案瞄准许多对象,
必须同时符合业余使用者及专业开发者需求的原则下,开发难以面面俱到,因为总是会有
部分族群的需求无法被满足,“这就像拿水管大范围的喷洒,而每个人衣服都会被水沾溼
一点,但是不会有人的衣服完全湿透。”Rasmus Lerdorf比喻。
不使用外挂框架的PHP的运算效能表现都很优异,但是受到外加框架的影响,原本可以在数
秒内处理上千个网页要求的PHP,效能大幅下降,变为只能处理数十个要求。Rasmus
Lerdorf表示,在HHVM出现之前,相较于对PHP效能表现的要求,使用者比较在意PHP能否降
低网页开发的难度,而这些框架能让开发者的工作变得比较简单。但是在Facebook推出HHVM
后,引出许多重视PHP效能表现的使用者,让Rasmus Lerdorf意识到许多使用者有效能表现
的需求。他开始思考如何将HHVM的JIT架构与PHP融合。
但Rasmus Lerdorf表示,PHP与HHVM两者在架构设计上相当不同,例如,HHVM的多执行绪架
构并不是很稳固。此外,HHVM的可携性并不佳,离可以在Windows平台上运作还有很大一段
路,而PHP有很多开发者在Windows环境开发,而HHVM无法照顾到那些使用者。
Rasmus Lerdorf表示,他不能放弃PHP的主要架构,虽然他们曾经考虑过融合两者,但是,
HHVM在使用上有很多的限制。虽然HHVM对Facebook及许多开发者是非常好的工具,但对于
PHP专案来说,HHVM的使用范畴还不够宽广,只能符合Facebook或是Wikipedia等特定专案
的需求。
非强型别语言的PHP,导入JIT是难上加难
然而,在PHP中加入JIT编译是件非常困难的事情。Rasmus Lerdorf表示,JIT必须学会辨认
程式的运作模式(Patterns),例如了解哪些部份为重要的程式码,并且在程式运作前,
预测程式被呼叫的时机,或是哪些部分的程式会呼叫。
Rasmus Lerdorf比喻,在许多汽车中,JIT必须能预测哪部分的车子会右转、哪部分的车子
会左转或是某些颜色汽车会直行,“而JIT必须要全部预测正确,否则效能会大大的降低。
”但是,如果预测正确,程式执行效能则会大大提升。
在一般的程式语言的编译中加入JIT已属不易,Rasmus Lerdorf表示,由于PHP的动态属性(
dynamic)让加入JIT是难上加难。他举例,开发者宣告参数$a值为1,但不代表程式所有的
$ a的值都为1,由于PHP中参数值可以很轻易地重新定义。在C语言中,当开发者宣告参数a
为整数,则a永远为整数。如果程式中有任何地方宣告a是整数以外的类型,连编译都无法
执行。而因为C语言此种强型别的程式语言,“JIT可以预测变量a为整数,但是在PHP中,
我们没有这种奢侈。”他解释,HHVM的做法为当JIT得知a是整数型别后,则假设a永远为整
数。
而HHVM为了在使用JIT编译,某种程度上受限了PHP的发展。HHVM的使用者必须清楚宣告变量
的性质,但是使用PHP的开发者,可以先宣告没有性质的类别(Class),后续再指定类别的
变量属性。“在没有任何限制下,将JIT加入PHP是我们要做的事。”他表示,PHP必须顾及
Wordpress、Drupal等框架的开发者,不能任意停止对此些框架的支援。故与HHVM相比,PHP
在打造JIT的条件限制更多。
但是,“这不代表我们不能做JIT。此外,我们也要控制PHP的发展走向。”Rasmus Lerdorf
表示。
目前,PHP核心贡献者之一的Dmitry Stogov开发一个原型JIT,并且使用某些实验性的应用
程式去测试运作。Rasmus Lerdorf表示,如果将此JIT用于执行某些重复性的运算或是循环
程式,得以让PHP 7效能又再快上10倍。
不过他也坦承,当此实验性的JIT用于Wordpress时,并未得到任何加速效果,“我们想要打
造的JIT不是要在大学课本上学到的东西,而是能在真实世界中运作的JIT。”他表示。因为
PHP一直都抱持如此的理想,试图解决人们生活中的问题,并且能真实世界中线上环境中运
作,而不只是存在课本中的理论。
Rasmus Lerdorf表示,在PHP刚问世时,他每天至少花16个小时开发PHP。但目前他已经逐渐
减少投入开发,转而投注心力在世界各地宣传及演讲。他打趣地表示:“与其自己开发,不
如激励远比我聪明,又愿意一天花十八小时写程式的人去开发PHP。”他表示,他的最终目
标是PHP中没有任何一行由他所撰写的程式码,“任何在成长中的专案都不应该由一个开发
者主导,老旧的程式码应该被新的程式码替换。”而他认为,其他开发者应该以此为目标。
4.完整新闻连结 (或短网址):
http://www.ithome.com.tw/news/99374
5.备注:
有点奇怪,没有提到PDO,当初还打算出PHP6的时候就说过 将来在PHP全面默认PDO
PHP7值得期待,但首先得习惯PDO....