美文网首页
PHP7 为什么变快了?

PHP7 为什么变快了?

作者: 吕艳凯 | 来源:发表于2020-04-21 15:01 被阅读0次

PHP7比PHP5在性能上有很大的提升
那么PHP7做了那些优化?
变量存储优化

1.存储变量的结构体变小,结构体成员尽量公用内存,内存占用降低,php7⼀个变量实际占⽤的内存⼤⼩为8字节,php5占用48字节,操作变快
2.php5是通过MAKE_STD_ZVAL动态的从堆内存上分配一个zval内存,php7直接使用栈内存,少了一次内存分配,php在大量创建变量时,php7会在栈上预分配一块内存来存放这些zval,栈内存可直接读取,堆内存不可以,节省了大量的内存分配和管理操作。

数组存储优化
hash计算:PHP底层对于字符串、数组、类属性、类方法、函数,访问时都要先通过hashtable查找到对应的指针,再执行对应的操作

1.PHP7为字符串单独创建了新类型叫做zend_string,除了char *指针和长度之外,增加了一个hash字段,用于保存字符串的hash值。
2.array查询有大量的$array[$key],大部分情况下$key的值都是不变的,PHP7将hash值保存起来,节省了大量的hash计算。
3.数组元素与hash映射表共享内存,降低了内存空间的占用。

hashtable存储优化

PHP5的链表是物理上的链表,链表中bucket之间的上下游关系通过真实存在的指针维护。
PHP7的链表是⼀种逻辑上的链表,所有bucket都分配在连续的数组内存中,不再通过指针维护上下游关系,每⼀个bucket只维护下⼀个bucket在数组中的索引(因为是连续内存,通过索引可以快速定位到bucket),即可完成链表上bucket的遍历。
哈希冲突:哈希冲突一般用链地址法或开放寻址法,PHP5和PHP7都使用链地址法解决哈希冲突,因为本来就是维护的哈希链表

函数调用

1.改进了函数的调用机制,通过对参数传递环节的优化,减少一些指令操作,提高了执行效
2.PHP程序中会大量使用call_user_function, is_int/string/array, strlen , defined 函数。PHP5 都是以扩展函数的方式提供,PHP7中这4类函数改成ZendVM的OPCODE指令,执行更快。

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

相关文章

  • PHP7 为什么变快了?

    PHP7比PHP5在性能上有很大的提升那么PHP7做了那些优化?变量存储优化 1.存储变量的结构体变小,结构体成员...

  • Mac homebrew install php7自定义参数生成

    Mac中如何安装PHP7,为什么brew安装php7为什么找不到.so文件呢,安装php7后丢失libphp7.s...

  • 变勤快了

    这段时间,基本就是这样度过的。 不知道是不是因为闲的时间太长了,孩子爹最近表现特别好,也让我深深感受到了他对我的爱...

  • 变勤快了

    最近养蚕,发现自己变的勤快了,以前是回来就想躺着,啥也不干。 现在回到家,赶紧把蚕盒打开,看看桑叶吃没吃完,要是吃...

  • PHP7垃圾回收机制

    前面一篇文章我们聊了下PHP5的垃圾回收机制,本篇文章再来聊下PHP7的垃圾回收机制。PHP7的速度比PHP5快了...

  • 老公变勤快了

    之前老公不怎么带娃,老觉得是我和婆婆的事儿,说了他好多次之后,这周终于改变了。 每周六固定打球时间,下午4点多...

  • 2017-09-17

    又快了为什么为什么又快了为什么?为什么地球会分成六块儿呢?为什么为什么地球会分成六块儿呢?

  • 减肥

    电脑屏幕的减肥过程,变瘦之后,也变得更快了。

  • 快了快了

    我扫干净了我坐的地方,那是一些泥土和无数颗泡沫粒粒,一个就算没有疫情也需要戴口罩的地方。 我在这里,写字,唱歌,读...

  • 快了,快了

    快了,快了, 幸福就快到了。 疲惫的旅人, 请再忍一忍。 看看你走过的路, 已经如此遥远。 不管出发的执念, 不想...

网友评论

      本文标题:PHP7 为什么变快了?

      本文链接:https://www.haomeiwen.com/subject/hjhuihtx.html