php7做了哪些优化

php7做了哪些优化

一  zval使用栈内存

在Zend引擎和扩展中,经常要创建一个PHP的变量,底层就是一个zval指针。之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存。(推荐学习:PHP视频教程)

而PHP7可以直接使用栈内存。PHP代码中创建的变量也进行了优化,PHP7直接在栈内存上预分配zval。这样节约了大量内存分配和内存管理的操作。

二 zend_string存储hash值,array查询不再需要重复计算hash

PHP7为字符串单独创建了新类型叫做zend_string,除了char *指针和长度之外,增加了一个hash字段,用于保存字符串的hash值。

立即学习“PHP免费学习笔记(深入)”;

PHP中array是核心数据结构,PHP程序中往往都有大量的$array[$key]操作,虽然hashtable查找的时间复杂度是O(1),但$key要转为hash值是要经过计算的。

不仅仅是array操作,实际上PHP底层对于类属性、类方法、函数,访问时都要先通过hashtable查找到对应的指针,再执行对应的操作。PHP7之前Zend引擎会有大量的CPU时间用于计算hash值。

实际上PHP程序运行起来之后,大部分情况下$key的值都是不变的。PHP7干脆将这个hash值保存起来,下次直接使用,这样就节省了大量的hash计算操作,PHP的hashtable与C数组的性能一致。

三 hashtable桶内直接存数据

PHP5的hashtable每个元素都是一个 Bucket *,而PHP7直接存Bucket,减少了内存申请次数,提升了Cache命中率和内存访问速度。

四 zend_parse_parameters改为宏实现

PHP的C扩展函数与PHP中的变量进行参数输入时,要使用zend_parse_parameters()函数,这个函数根据一个字符串参数找到对应PHP的zval指针,然后进行赋值。 这个函数实际上有一定的性能消耗。

PHP7直接使用宏替换了zend_parse_parameters函数,C扩展中不再需要使用zend_parse_parameters进行逐个参数的查找,宏展开后自动会实现参数赋值。仅此一项就提升了5%的性能。

五 新增加4种OPCODE

很多PHP程序中会大量使用call_user_function, is_int/string/array,  strlen , defined 函数。PHP5 都是以扩展函数的方式提供,PHP7中这4类函数改成ZendVM的OPCODE指令,执行更快。

六 其他更多优化

除了上面5个主要优化点之外,PHP7还有其他更多的细节性能优化。

以上就是php7做了哪些优化的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2523024.html

(0)
上一篇 2025年3月5日 17:35:34
下一篇 2025年3月5日 17:35:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • php函数名区分大小写吗?

    php对大小写敏感问题的处理比较乱,写代码时可能偶尔出问题,所以下面本篇文章就来总结一下。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 但我不是鼓励大家去用这些规则。推荐大家始终坚持“大小写敏感”,遵循统一的代码规范。 1…

    2025年3月5日
    000
  • php构造函数有哪些?

    php构造函数是一种特殊的方法,主要用来在创建对象时初始化对象; 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。 当使用 new 操作符创建一个类的实例时,构造函数(方法)将会自动调用,其名称必须是 __constr…

    2025年3月5日
    200
  • PHPMailer是什么

    phpmailer是一个用于发送电子邮件的php函数包。直接用php就可以发送,无需搭建复杂的email服务。 介绍 它提供的功能包括: (推荐学习:PHP视频教程) *.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址 立即学习“P…

    2025年3月5日
    200
  • php初学者看什么书?

    如果你学过其他的语言,你会发现php其实还算简单的。有人说php学习适合看手册,但是依然有很多的经典书可以帮助大家入门和提高。以下4本你就可以好好读读。 1、《细说PHP》 PHP入门的经典,内容详实易懂,全面涵盖了web开发的所需的知识内…

    2025年3月5日 编程技术
    200
  • php和c语言哪个难

    php是弱类型解释型语言,对类型不敏感,入门简单,基础知识很快就能学习好;c是典型的强类型语言,变量类型,无法被随意更改,所以难度较php稍大些。 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处…

    2025年3月5日
    200
  • php变量有哪些基本数据类型?

    php变量的有八种数据类型,分别为: 1、四种标量类型: 1)、boolean (布尔型): 这是最简单的类型,只有两种取值,可以为 TRUE/true 或 FALSE/false ,不区分大小写。详细请查看:PHP布尔类型(boolean…

    2025年3月5日
    200
  • php变量命名区分大小写吗?

    php是流行的编程语言,特别在web方向应用广泛。那么php的变量命名是否区分大小呢?真是答案是:php的变量命名是区分大小写的。 PHP的变量名是区分大小写的,但类、函数、内置的结构以及关键字不区分大小写。 下面以实践来演示一下PHP的变…

    2025年3月5日 编程技术
    200
  • php多线程怎么实现

    php默认并不支持多线程,要使用多线程需要安装pthread扩展,而要安装pthread扩展,必须使用–enable-maintainer-zts参数重新编译php,这个参数是指定编译php时使用线程安全方式。 PHP 实现 P…

    2025年3月5日
    200
  • php变量名中不能包含哪些字符?

    php变量是用于存储信息的”容器”,php变量可以赋值或者表达式,那么,php变量需要怎么命名?php变量名中不能包含哪些字符?下面我们就来看一看php变量的命名规则。 先看一个例子: 登录后复制 与代数类似,可以给…

    2025年3月5日
    200
  • php编码规范有哪些?

    为什么需要编码规范? 为了提高工作效率,保证开发的有效性和合理性。 为了提高代码可读性和可重复利用性,从而节约沟通成本。 php编码规范 1、文件格式 立即学习“PHP免费学习笔记(深入)”;  ● 所有php文件使用完整的php标签,如 …

    2025年3月5日
    200

发表回复

登录后才能评论