您的位置:首页 > 编程语言 > PHP开发

PHP如何提高性能(分析)

2017-09-04 11:05 281 查看
PHP为什么慢?

PHP最初设计并非解决计算密集型的应用场景,即它为了提升开发效率而牺牲了执行效率。PHP的一个很大的特点是它的弱类型特性,它实际对应的C的存储结构是zval:



这个结构体将会占据远比C变量多得多的内存。单个变量内存消耗可能还不明显,但一旦用到PHP的数组等,则复杂指数上升(数组的实现是HashTable)。然后Zend引擎执行时将这些PHP代码编译为opcode(PHP中间字节码),由Zend引擎逐行解析执行。同样的操作对比C来说,PHP消耗了更多的CPU和内存等系统资源。除此之外还有内存自动回收、变量类型判断等,都会增加系统资源的消耗。

PHP脚本在启动和关闭的过程,本身也有着一系列的初始化和清理工作,同样也是占据了不少的耗时:



通常情况下,PHP执行效率排行是:

1、最快的是PHP语言结构(isset、echo等),PHP语言的一部分(它们根本不是函数)

2、然后比较快的是PHP的原生和扩展函数。PHP扩展基于Zend API之上,用C实现的功能,执行效率和C++/Java是属于同一数量级。

3、真正慢是通过PHP写的代码和函数。如纯PHP实现的框架,框架本身的模块较多,会明显拖累语言层面的执行效率,同时占据更多的内存。

因此在实现逻辑复杂计算类型的功能时,不推荐使用PHP去实现,在具体的功能实现场景中,寻求更原生的解决方案(原生接口或扩展),而不是写一堆复杂的PHP代码来实现这类型功能。

将业务功能重写成为一个PHP扩展能够大幅度地提升代码的执行效率,但是更常见的解决方案是用C/C++独立写一个服务Server,然后PHP通过socket和服务server通信来完成业务处理,这样并不将PHP本身和业务耦合在一起。不过Web服务大部分的性能瓶颈都在网络传输和其他服务server的耗时上(如MySQL等),PHP执行的耗时在整体耗时的占用比例非常小,从业务角度来说影响不大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: