跟着辛星一起了解下PHP的函数的性能
首先声明一下,这篇文章是我的原创,但是,这些数据不是我总结出来的,大家可以搜索下“百度工程师HDK”,这些数据是他提供的,我只是给一个总结,因为他那篇文章很长,我这里提炼了几点要点。
要了解函数的性能,首先要知道函数的执行流程,它首先通过scanning被转化为语言片段(tokens),然后通过parsing为简单有意义的表达式,然后compile(编译)为Opcode,最后execute(执行)。因为PHP本身是用C去实现的,因此最终调用的都是C的函数,即PHP就是一个用C开发出来的软件。
在PHP中,用户通过PHP实现的自定义函数和内置函数有完全不同的实现机制,Zend在执行的时候,如果发现调用的是内置函数,只是做一个转发操作,内置函数在编译后会展开成一个zif_xxx的函数,而对于内置函数的操作,zend实现的是浅拷贝,其效率和C差不多,非常给力。如果是用户自定义的函数,则用户函数的调用最终是解析一堆的opcode。用户自定义空函数的执行速率大约是280w/s,即每秒可以执行二百八十万次,而内置函数则达到了780w/s,差不多是用户自定义函数的三倍。
不讲这些原理性的东西了,下面说一些测试结果把,函数名的长度对性能是有一些影响的,下面是他给出的数据:
通过上表,我们发现一个长度为1的函数和长度为16的空函数调用,性能会差一倍,原因何在,就是因为函数名越长,查询需要的时间就越多,因此,函数名还是尽量短一些。
这张图片是用户自定义的函数直接调用内置函数,只是单纯的测试两个函数的性能,很好理解把,不同类型的函数的执行效率差别很大的。
当然他本人还测试了一些PHP的一些函数的运行效率,我直接把这些东西过滤掉了,感觉并不特别有意义。