类的
方法 类的原理是
用户功能一样,它也被
翻译成
操作码的电话。该类的实现,可以是一个数据结构,实现了zend_class_entry,保留该类相关的一些基本信息。这个项目是完成时编译PHP。
在zend_function一般,有一个成员称为范围,指向当前方法对应的类的zend_class_entry。PHP面向对象的实现,没有更
详细的
介绍。在将来,我们将专门写一篇文章来解释PHP中面向对象实现的原理,就功能而言,方法实现的原理与
函数完全相同,从理论上来说,它的
性能是相似的,我们将在以后详细地进行性能比较。
性能比较
函数名对性能的
影响 测试方法比较1, 2, 4个、8个和16个名称的函数,比较它们的可
执行时间每秒,并确定函数名长度对性能的影响。
测试的结果如下所示
结果分析
从图中可以看出,函数名的长度对性能有一定的影响。一个长度为1的函数和一个长度为16的空函数调用,其性能是1倍。分析源代码不难找到
原因。例如,如前所述,在Zend被调用,它将
查询相关信息,通过函数名在全球funtion_table第一,和function_table是哈希表。作为一个必要性,较长的
名字,它的时间就越长。因此,当
程序实际上写的函数,即多次调用的名称不太长。
虽然函数名称长度对性能有一定的影响,但它是多少这个问题应该结合实际
情况来考虑,如果一个函数本身比较复杂,那么整体性能就不显著了。一个建议是给那些被调用多次的人,函数本身有一个相对简单的函数,可以适当取一些简洁而全面的名称。
函数数对性能的影响
更多
测试方法
在以下三个环境中,函数调用测试,分析结果:1。程序只包含1个函数2。程序包含100个函数3。程序包含1000个函数,测试这三种情况下每秒可以调用的函数数。
测试的结果如下所示
结果分析
从测试结果中,我们可以看到,性能几乎是在这三种情况一样,和性能的下降是微不足道的功能数量增加。从实现原理的分析,在一个实现的唯一
区别在于功能采集部分在以前的文章中提到过。,所有的功能都放在一个哈希表,和
搜索效率仍然应该接近O(1)在不同的数字,所以性能差距不是很大。
不同
类型函数调用的消耗
测试方法
选择用户函数、类方法、静态方法和内置函数,每个函数都不直接做任何事情,它主要测试空函数调用的消耗,测试的结果是在第二个
可执行测试中去掉其他的影响,所有函数的名称长度相同。
测试的结果如下所示
结果分析
它可以从测试结果,由用户编写的PHP函数,无论类型,大约是相同的效率,在280w /当我们想到,即使是空调,内置的功能是更有效的,达到780w / S,后者是前者的3倍。它可以可以看出,内置函数调用的开销还是比用户功能低很多。从以前的原理分析,我们知道主要的差距是初始化符号表,接收
参数,所以当用户调用的函数。
内置函数与用户函数的性能比较
测试方法
我们比较内置函数和用户函数的性能。在这里,我们选择了几种常用的函数,然后使用PHP进行相同功能的性能比较,在测试中,我们选择了一个典型的字符串、数学和数组进行比较。这些函数截取字符串(在),10元到2元(decbin)、最小值(MIN)和密钥(array_keys)数组中。
测试的结果如下所示
结果分析
As we can see from the test results, as we expect, the built-in function is far higher than the ordinary user function in the overall performance.In particular, for functions involving string class operations, the gap reaches 1 orders of magnitude.Therefore, one of the principles that functions use is that if a function has a corresponding built-in function, it is possible to use it as much as possible instead of writing the PHP function itself.For some functions that involve a large number of string operations, to improve performance, you can consider using extensions to implement.For example, common rich text filtering, and so on.
c函数的性能比较
测试方法
我们比较3个字符串的
运算和算术运算功能,和PHP实现
扩展。三功能简单的算法运算,字符串比较和多算法操作。除了功能本身的两种,而且将拆卸空调的费用后的性能测试,
检查功能(C和内置的PHP)的性能差异,消费也是空调功能测试证实了10W操作消耗时间的实现
测试的结果如下所示
结果分析
PHP函数式空调的影响后,内置函数和C函数的开销较小。随着函数的功能越来越复杂,双方的性能几乎相同,这在前面功能实现的分析中很容易体现出来,毕竟内置函数是C实现,函数越复杂,C与PHP之间的性能差距就越小。PHP函数调用的开销比C.的要大得多,它对简单函数的性能有一定的影响,因此PHP中的函数不应该嵌套和封装得太深。
伪函数及其性能
在PHP中,有一些功能,这是在使用一个标准的使用功能,但底层的实现是真实的和函数调用完全不同,这些函数不属于三种功能的上述任何一类,其本质是一个单独的操作码,这里所谓的伪函数或指令函数的估计。
As mentioned above, use pseudo function and the standard function as seems to have the same characteristics.But when they were finally executed, they were reflected by Zend into a corresponding instruction (opcode) to invoke, so its implementation is closer to if, for, arithmetic operation and so on.
PHP中的伪函数
设置 空
撤消
eval
通过上面的介绍,我们可以看到伪函数是直接执行的,因为它直接被翻译成指令。与普通函数相比,伪功能比函数调用,那么贵,所以性能更好。我们通过以下测试做比较,array_key_exists和设置可以确定数组中存在的关键和看他们的表演。
从图中我们可以看到,与array_key_exists,isset性能比前者高出很多,大约是4倍,前者,甚至与虚函数调用,它的性能大约是1倍。这也表明,PHP函数调用的开销仍然是比较大的。