php7卓越性能背后的原理有哪些? 财富值49

2016-08-19 08:18发布

PHP7卓越性能背后的原理有哪些?
付费偷看设置
发送
10条回答
那些骂PHP的人,真心相对你们说,你们嫉妒心太强了。想想你们用的语言,哪个不是设计者搞了一堆一堆的所谓的规则和所谓的语法,让你在所谓的语言世界里跳来跳去,想想你们每天的工作内容: 是在玩电脑,还是电脑在玩你? 你们就是太见不得自己辛辛苦苦学习了一门语言,结果有一门语言可以快速学习掌握。世界在进步,接受新东西吧。不要被自己已掌握的知识框死了。
性能不知道,反正看人用着真心开心,自己也看得顺眼~
世界上只有两种语言。 一种是被人骂的。 一种是无人问津的。 就这样。
PHP7在运行原理上与PHP5相比并没有变化,这与hhvm不同。主要是基于perf性能分析工具进行了常规性能优化。

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

想办法去优化一个有20年历史的程序,这是一件非常有挑战性的事情,比推到重构难度更高。世界上有80%的网站用PHP,使用PHP7后这些网站程序无太大成本就能免费得到1倍性能提升。将节约多少CPU,节约多少电力,减少多少碳排放。另外PHP是开源项目,背后没有商业公司,完全由社区运作。使用PHP语言的开发者和企业从未向PHP官方付过一分钱。所以建议各位知友口下留德,无论您多么鄙视PHP,但请尊重别人为世界所做的付出。
php性能低是在架构。php每个请求都要重新加载一次。用php做中文分词,每个请求都要加载几兆的字典,能不慢吗。java为啥快,其中一个原因就是常驻服务端。lua为啥快,因为直接嵌入nginx里面。
既然很多人不复php效率低,那么就来约测试吧。
做一个php的echo代码,然后用ab测试下,看看每秒请求多少次?
lua我测试是1万次/秒。看看php能达到1000次/秒不。
无论啥优化都可以做。
喷答主 @朱涵俊 说php没法常驻内存的人,是没理解答主的意思,看不下去了我要出来解释一波。本来想发评论下面的结果字数限制。。匿了
-------------------技术分割线------------------
99%的网站都会用到mvc架构,那php的框架是怎么工作的呢?首先网站根目录会一个apache的配置文件,也就是.htaccess,这个文件告诉apache将所有的请求重定向到index.php,也就是框架的入口文件,然后框架会根据url来匹配对应的路由,没错这一层就是MVC的Controller部分,然后如果路由匹配成功就会执行路由下面程序员写的业务逻辑代码,但业务里面是需要经常访问数据库的,如果一条一条的拼接sql语句那就太麻烦了,所以这时候就要把对数据库的操作按目的的封装成一个个可重用的模块,没错这一层就是MVC里面的Model层,然后通过Model拿到所需的数据后要呈现给用户啊,最后终于轮到View层出马了,view层是由程序员编写的网页模板文件和渲染引擎构成的,将参数和模板文件传给模板引擎,最后模板引擎将渲染完成后的html代码返回给apache,apache再将网页返回给用户的浏览器解析。

从用户点击一个链接到看到网页,也就一眨眼的功夫,没想到php经历了这么多~聪明的你发现了吗?用户每点一次链接,php都会从头从index.php入口文件开始执行,直到最后view渲染出页面~omg我大php表示我的心真的好累~

回到正题,答主一再强调“php每次都要从头执行代码!从头执行代码!从头执行代码!”,你们真的有听明白吗?

为什么说这点是php相比较其他语言慢的原因,你想想啊一个普通的php框架代码量再怎么也有2、3M吧,也就是说每收到一个请求php都会载入一次框架然后从头开始执行,还要执行程序员写的业务逻辑代码。但是java或者nodejs等就不一样了,这些语言写的网站也会用到框架,但是他们的代码和框架是常驻内存的,也就是说每次收到请求后直接就可以立即执行程序员的业务代码了,而不用像php那样要先载入框架controller层解析路由然后再载入model层解析模型代码最后再载入view层解析模板~

这虽然不是php相对较慢的主要原因,但这绝对是php相对其他语言效率较低的重要原因之一,这并不是php烂而是跟php的运行机制有很大原因,以言论仅代表个人立场。大概就这样,没事找事挑刺儿挑我语法问题的人请走开。
php7性能优化主要是细节优化,并没有从本质上改变什么,
打个比方,swoole虽然只是个扩展,但是相当于从50分到60的提高,
php7相当于从80分到90分的提高。

php是弱类型,jit比强类型难很多。
一门语言的成功是多方面的,性能只是指标之一,简单耐操,不出乱子就是php的特色,另外纠正楼上的,php并不是完全请求释放,有部分就是常驻的,你说的分词完全可以随php启动而常驻,我们曾经就干过这事。
最后,从没有觉得php7的对手是node,python,ruby,java,
php7最大的对手是php5.先干掉php5才是他最大的难题。
在2015年的《PHP技术峰会》(PHPCon,上海)听鸟哥的PHP7分享,写过一篇解析文章,基本覆盖了技术分享的核心内容,有兴趣的同学可以看看。
(为了确保PHP7技术解析的点,不对其他同学产生误导,专门请鸟哥做过文章review)
PHP7革新与性能优化
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反射加动态来得方便。

一周热门 更多>