美文网首页
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 为什么变快了?

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