首页 后端开发 php教程 百度工程师讲PHP函数的实现原理及性能分析(二)_PHP

百度工程师讲PHP函数的实现原理及性能分析(二)_PHP

Jun 01, 2016 pm 02:35 PM
php函数 实现原理 工程师 百度

类方法
类方法其执行原理和用户函数是相同的,也是翻译成opcodes顺次调用。类的实现,zend用一个数据结构zend_class_entry来实现,里面保存了类相关的一些基本信息。这个entry是在php编译的时候就已经处理完成。
在 zend_function的common中,有一个成员叫做scope,其指向的就是当前方法对应类的zend_class_entry。关于php中面向对象的实现,这里就不在做更详细的介绍,今后将专门写一篇文章来详述php中面向对象的实现原理。就函数这一块来说,method实现原理和 function完全相同,理论上其性能也差不多,后面我们将做详细的性能对比。

性能对比
函数名长度对性能的影响

》》测试方法 对名字长度为1、2、4、8、16的函数进行比较,测试比较它们每秒可执行次数,确定函数名长度对性能的影 响

》》测试结果如下图
百度工程师讲PHP函数的实现原理及性能分析(二)_PHP

》》结果分析
从图上可以看出,函数名的长度对性能还是会有一定的影响。一个长度为1的函数和长度为16的 空函数调用 ,其性能差了1倍。分析一下源码不难找到原因,如前面叙述所说,函数调用的时候zend会先在一个全局的funtion_table中通过函数名查询相关信息,function_table是一个哈希表。必然的,名字越长查询所需要的时间就越多。 因此,在实际编写程序的时候,对多次调用的函数,名字建议不要太长。

虽然函数名长度对性能有一定影响,但具体有多大呢?这个问题应该还是需要结合实际情况来考虑,如果一个函数本身比较复杂的话,那么对整体的性能影响并不大。一个建议是对于那些会调用很多次,本身功能又比较简单的函数,可以适当取一些言简意赅的名字。
函数个数对性能的影响

》》测试方法
在以下三种环境下进行函数调用测试,分析结果:1.程序仅包含1个函数 2.程序包含100个函数 3.程序包含1000个函数。测试这三种情况下每秒所能调用的函数次数

》》测试结果如下图
百度工程师讲PHP函数的实现原理及性能分析(二)_PHP

》》结果分析
从测试结果可以看出,这三种情况下性能几乎相同,函数个数增加时性能下降微乎其微,可以忽略。从实现原理分析,几种实现下唯一的区别在于函数获取的部分。如前文所述,所有的函数都放在一个hash表中,在不同个数下查找效率都应该还是接近于O(1),所以性能差距不大。
不同类型函数调用消耗
》》测试方法
选取用户函数、类方法、静态方法、内置函数各一种,函数本身不做任何事情,直接返回,主要测试空函数调用的消耗。测试结果为每秒可执行次数 测试中为去除其他影响,所有函数名字长度相同
》》测试结果如下图

》》结果分析
通过测试结果可以看到,对于用户自己编写的php函数,不管是哪种类型,其效率是差不多的,均在280w/s左右。如我们预期,即使是空调,内置函数其效率也要高很多,达到780w/s,是前者是3倍。可见,内置函数调用的开销还是远低于用户函数。从前面原理分析可知主要差距在于用户函数调用时初始化符号表、接收参数等操作。

内置函数和用户函数性能对比

》》测试方法
内置函数和用户函数的性能对比,这里我们选取几个常用的函数,然后用php实现相同功能的函数进行一下性能对比。测试中,我们选取字符串、数学、数组中各一个典型进行对比,这几个函数分别是字符串截取(substr)、10进制转2进制(decbin)、求最小值(min)和返回数组中的所以 key(array_keys)。
》》测试结果如下图
百度工程师讲PHP函数的实现原理及性能分析(二)_PHP
》》结果分析
从测试结果可以看出,如我们预期,内置函数在总体性能上远高于普通用户函数。尤其对于涉及到字符串类操作的函数,差距达到了1个数量级。因此,函数使用的一个原则就是如果某功能有相应的内置函数,尽量使用它而不是自己编写php函数。对于一些涉及到大量字符串操作的功能,为提高性能,可以考虑用扩展来实现。比如常见的富文本过滤等。
和C函数性能对比

》》测试方法
我们选取字符串操作和算术运算各3种函数进行比对,php用扩展实现。三种函数是简单的一次算法运算、字符串比较和多次的算法运算。除了本身的两类函数外,还会测试将函数空调开销去掉后的性能,一方面比对一下两种函数(c和php内置)本身的性能差异,另外就是侧面印证空调函数的消耗 测试点为执行10w次操作的时间消耗
》》测试结果如下图
百度工程师讲PHP函数的实现原理及性能分析(二)_PHP

》》结果分析
内置函数和C函数的开销在去掉php函数空调用的影响后差距较小,随着函数功能越来越复杂,双方性能趋近于相同。这个从之前的函数实现分析中也容易得到论证,毕竟内置函数就是C实现的。函数功能越复杂,c和php的性能差距越小 相对c来说,php函数调用的开销大很多,对于简单函数来说性能还是有一定影响。因此php中函数不宜嵌套封装太深。
伪函数及其性能

在php中,有这样一些函数,它们在使用上是标准的函数用法,但底层实现却和真正函数调用完全不同,这些函数不属于前文提到的三种function中的任何一类,其实质是一条单独的opcode,这里估且叫做伪函数或者指令函数。

如上所说,伪函数使用起来和标准的函数并无二致,看起来具有相同的特征。但是他们最终执行的时候是被zend反映成了一条对应的指令(opcode)来调用,因此其实现更接近于if、 for、算术运算等操作。
》》php中的伪函数
isset
empty
unset
eval
通过上面的介绍可以看出,伪函数由于被直接翻译成指令来执行,和普通函数相比少了一次函数调用所带来的开销,因此性能会更好一些。我们通过如下测试来做一个对比。 Array_key_exists和isset两者都可以判断数组中某个key是否存在,看一下他们的性能
百度工程师讲PHP函数的实现原理及性能分析(二)_PHP
从图上可以看出,和 array_key_exists相比,isset性能要高出很多,基本是前者的4倍左右,而即使是和空函数调用相比,其性能也要高出1倍左右。由此也侧面印证再次说明了php函数调用的开销还是比较大的。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

百度Apollo重磅发布全球首个支持L4级自动驾驶的大模型Apollo ADFM 百度Apollo重磅发布全球首个支持L4级自动驾驶的大模型Apollo ADFM Jun 04, 2024 pm 08:01 PM

5月15日,百度Apollo在武汉百度萝卜快跑汽车机器人智行谷举办ApolloDay2024,全方位展示百度十年深耕自动驾驶的重大进展,基于大模型带来技术阶跃、面向乘客安全全新定义的无人车和全球最大的无人车自动运营网络,百度已经做到自动驾驶比人类驾驶更安全。得益于此,更加安全舒适、绿色低碳的出行方式正从理想成为现实。百度集团副总裁、智能驾驶事业群组总裁王云鹏现场表示:“我们做无人车的初衷,是满足老百姓日益增长的、对美好出行的向往,人民群众的满意是我们前进的动力。因为安全、所以美好,我们欣喜地看到

deepseek网页版入口 deepseek官网入口 deepseek网页版入口 deepseek官网入口 Feb 19, 2025 pm 04:54 PM

DeepSeek 是一款强大的智能搜索与分析工具,提供网页版和官网两种访问方式。网页版便捷高效,免安装即可使用;官网则提供全面产品信息、下载资源和支持服务。无论个人还是企业用户,都可以通过 DeepSeek 轻松获取和分析海量数据,提升工作效率、辅助决策和促进创新。

百度李彦宏率队拜访中国石油,讨论油气行业智能化 百度李彦宏率队拜访中国石油,讨论油气行业智能化 May 07, 2024 pm 06:13 PM

本站5月7日消息,5月6日,百度创始人、董事长兼首席执行官李彦宏带队在北京拜访中国石油天然气集团有限公司(以下简称“中国石油”),并与中国石油集团董事长、党组书记戴厚良举行会谈。双方就强化合作,推动能源行业与数字化智能化深度融合进行了深入交流。中国石油将加快推进数字中中国石油建设,加强与百度集团合作,推动能源行业与数字化智能化的深度融合,为保障国家能源安全作出更大贡献。李彦宏表示,大模型展现出的“智能涌现”和理解、生成、逻辑、记忆等核心能力,为前沿科技与油气业务结合打开了更加广阔的想象空间。一直

消息称三星 Galaxy S24 系列手机国行版'即圈即搜”将支持谷歌搜索 消息称三星 Galaxy S24 系列手机国行版'即圈即搜”将支持谷歌搜索 Jun 01, 2024 am 09:54 AM

5月31日消息,据博主@i冰宇宙今日爆料,三星GalaxyS24系列手机国行版“即圈即搜”将支持谷歌搜索。具体上线时间,该博主并未透露。根据三星此前介绍,三星GalaxyS24系列实装了众多高阶AI能力,将输入、翻译、录音机、笔记、相机等实用功能AI化,为用户带来更方便、更高效的综合体验。与海外版不同的是,三星GalaxyS24系列的AI功能大多由国内厂商提供服务,例如百度等。此前报道,GalaxyAI深度集成百度文心大模型多项能力,可提供端侧赋能的通话、翻译功能,以及借助生成式AI带来的智能摘

PHP函数的性能如何? PHP函数的性能如何? Apr 18, 2024 pm 06:45 PM

不同PHP函数的性能对应用程序效率至关重要。性能较好的函数包括echo、print,而str_replace、array_merge、file_get_contents等函数性能较慢。例如,str_replace函数用于替换字符串,性能中等,而sprintf函数用于格式化字符串。性能分析表明,执行一个示例仅需0.05毫秒,证明了函数性能良好。因此,明智地使用函数可以构建更快、更高效的应用程序。

PHP 函数与 Flutter 函数的异同 PHP 函数与 Flutter 函数的异同 Apr 24, 2024 pm 01:12 PM

PHP和Flutter函数的主要区别在于声明、语法和返回类型。PHP函数使用隐式返回类型转换,而Flutter函数显式指定返回类型;PHP函数可通过?指定可选参数,而Flutter函数使用required和[]指定必填和可选参数;PHP函数使用=传递命名参数,而Flutter函数使用{}指定命名参数。

ai工具推荐 ai工具推荐 Nov 29, 2024 am 11:08 AM

本文介绍了六款流行的 AI 工具,包括抖音豆包、文心一格、腾讯智影、百度飞桨 EasyDL、百度 AI Studio 和讯飞星火认知大模型。这些工具涵盖不同的功能,如文本创作、图像生成、视频编辑和 AI 模型开发。选择合适的 AI 工具需要考虑功能需求、技术水平和成本预算等因素。这些工具为需要 AI 辅助的个人和企业提供了方便且高效的解决方案。

百度又一国民产品接入DeepSeek,是想开了还是跟风? 百度又一国民产品接入DeepSeek,是想开了还是跟风? Mar 12, 2025 pm 01:48 PM

DeepSeek-R1赋能百度文库与网盘:深度思考与行动的完美融合短短一个月内,DeepSeek-R1已迅速融入众多平台。百度凭借大胆的战略布局,将DeepSeek作为第三方模型伙伴,整合进自身生态系统,这标志着其“大模型 搜索”生态战略的重大进展。百度搜索和文心智能体平台率先接入DeepSeek及文心大模型的深度搜索功能,为用户提供免费的AI搜索体验。同时,“百度一下,你就知道”的经典slogan回归,新版百度APP也整合了文心大模型和DeepSeek的能力,推出“AI搜索”、“全网信息提炼”

See all articles