欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP7卓越性能背后的原理有哪些?

程序员文章站 2024-02-11 16:10:16
...
鸟哥在微信里放出了PHP7的下载链接:PHP: Get Download
比如Zval的变动对于缓存更加友好等等
----------------------------------20151205----------------------------------
题主我表示很困惑,问个问题怎么气氛这么古怪呢?有几个方面要说明一下:
1、鸟哥确实提前放出了下载链接,贴出来也是因为提问的时候官网没有直达,只在git有,所以方便大家下载查看。
2、我现在不是PHP程序员,只是对JIT和VM的实现比较有兴趣,专门来嘲讽PHP的各位可以换一个地方喷。

回复内容:

PHP7在运行原理上与PHP5相比并没有变化,这与hhvm不同。主要是基于perf性能分析工具进行了常规性能优化。

减少内存分配次数,多使用栈内存,缓存数组hash值,字符串解析成参数改为宏展开,使用大块连续内存代替小块内存等等。更细节信息请看鸟哥的PHP7分享PPT。zend引擎程序的性能提升了很多,PHP程序性能自然好了。所有的优化都是很实在的,从细节入手积少成多。

想办法去优化一个有20年历史的程序,这是一件非常有挑战性的事情,比推到重构难度更高。世界上有80%的网站用PHP,使用PHP7后这些网站程序无太大成本就能免费得到1倍性能提升。将节约多少CPU,节约多少电力,减少多少碳排放。另外PHP是开源项目,背后没有商业公司,完全由社区运作。使用PHP语言的开发者和企业从未向PHP官方付过一分钱。所以建议各位知友口下留德,无论您多么鄙视PHP,但请尊重别人为世界所做的付出。 在2015年的《PHP技术峰会》(PHPCon,上海)听鸟哥的PHP7分享,写过一篇解析文章,基本覆盖了技术分享的核心内容,有兴趣的同学可以看看。
(为了确保PHP7技术解析的点,不对其他同学产生误导,专门请鸟哥做过文章review)
PHP7革新与性能优化 php7性能优化主要是细节优化,并没有从本质上改变什么,
打个比方,swoole虽然只是个扩展,但是相当于从50分到60的提高,
php7相当于从80分到90分的提高。

php是弱类型,jit比强类型难很多。
一门语言的成功是多方面的,性能只是指标之一,简单耐操,不出乱子就是php的特色,另外纠正楼上的,php并不是完全请求释放,有部分就是常驻的,你说的分词完全可以随php启动而常驻,我们曾经就干过这事。
最后,从没有觉得php7的对手是node,python,ruby,java,
php7最大的对手是php5.先干掉php5才是他最大的难题。
  • PHP's new hashtable implementation
  • Internal value representation in PHP 7 -1
  • Internal value representation in PHP 7 - 2

see How is PHP 7 twice as fast? : PHP 世界上只有两种语言。 一种是被人骂的。 一种是无人问津的。 就这样。 性能不知道,反正看人用着真心开心,自己也看得顺眼~ 那些骂PHP的人,真心相对你们说,你们嫉妒心太强了。想想你们用的语言,哪个不是设计者搞了一堆一堆的所谓的规则和所谓的语法,让你在所谓的语言世界里跳来跳去,想想你们每天的工作内容: 是在玩电脑,还是电脑在玩你? 你们就是太见不得自己辛辛苦苦学习了一门语言,结果有一门语言可以快速学习掌握。世界在进步,接受新东西吧。不要被自己已掌握的知识框死了。 PHP7性能的确有很大的提升,但个人认为还称不上卓越二字,除非运行机制有本质的变化,否则,正如 @韩天峰 网友评论中说的那样,对解释器进行优化。PHP性能相对Java之类的半编译或C这种编译语言低,这个是PHP代码运行机制决定的。做PHP的如果连这个都不懂的话,要么不了解PHP,要么只了解PHP。但这也不能得出PHP不如Java或C这个结论,项目一般来说需要基于开放成本和运行成本来决定选择语言和架构,使用合适的工具干合适的事而已,一个语言能干什么不能干什么,性能不能一票否决。开发语言排行榜中PHP的排名已经足以证明PHP的成就了,很多做PHP的人不能正视这点,一般都是因为对PHP了解的不多或对其他语言缺乏了解导致的不自信。数据结构+算法才是程序中最重要的,PHP7的优化正是从这两方面来提升PHP性能的,而这也表明如果我们这些PHP程序员做得足够好的话,我们写出的代码,处理同样逻辑,会比那些垃圾的C或Java程序员的代码性能更高。当然也有优秀的C和Java程序员,但他们是不会来嘲笑另外一种语言的,因为他们更明白数据结构+算法=程序这个道理。
我们最近在一个项目中用Symfony,另一个项目中用Laravel,这两个都是优秀的PHP Framework,我的感受还是坚信PHP真的不是追求高运行性能的编程语言。但巧妙地利用PHP弱类型这一特性,有时比Java或C#方便多了,这两种语言的反射技术还是不如PHP反射加动态来得方便。 用了大部分脚本类语言都有的优化方案进行了优化。 不能说本身性能是卓越的,语言有适用环境,不同环境下的也没啥好比的。
作为一个简单易用,覆盖面广的语言来说,PHP7相对于之前版本的变化是卓越的,在一个开源*的社区中推进这个吃力的事情不是特别的容易。

HHVM之类的,是一个基于公司项目的产品,不会过多的考虑到外面的人是怎么用的,的确没有历史的包袱,但是也意味着要用上要做相当的改变。从某种意义上(为应用带来的额外代价)来说,用HHVM和用java没啥区别,无非是重新拿java写一遍还是用hhvm可以保留原先的php程序但是却要增加一大堆运维成本。