目前一直使用php7也看了许多文档视频等,整理一下相关细节(仅为记录~),对于PHP7性能,如下图所示。

* 在wordpress3.0.1中 php7比php5.6性能提升约3倍左右

新特性

一.变量类型

php7版本函数参数和返回值增加了类型的限定,设定类型变量主要对密集计算增加了性能。

function test(int $a,string $b,array $c) : int {
//code
}

二.错误异常

php版本<7 程序出错后程序会抛出致命错误并且终止程序异常,php7可以使用try..catch捕获错误。

try {
//error code
}catch(EngineException $e){
echo $e->getMessage();
}

三.性能优化

1.zval使用了栈内存

在zend引擎中,经常要创建一个变量,底层就是一个zval指针。之前的版本都是从MAKE_STD_ZVAL动态的从堆上分配一个zval的内存,php7可以直接使用栈内存。

php5
zval *val;
MAKE_STD_ZVAL(val); php7
zval val;

这样做节省了大量的内存分配和内存管理等操作,从而性能得到很大的提升。

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

php7中为字符串单独的创建了新类型叫做zend_string,除了char*指针和长度外,还增加了一个hash值,进而对于数组查找不需要反复计算hash值。在php7版本以前zend引擎会有大量的时间用于计算hash值,对于实际php程序运行起来之后,大部分key是保持不变的,对于php7引擎存储了hash值,避免大量的hash计算。

strut _zend_string{
zend_refcounted gc;
zend_ulong h;//存储hash值
site_t len;
char val[1]
}

这样做主要优化了数组的键值查找,实际上在php底层很多地方用到了hash,例如类的属性,类方法函数等

3.hashtable桶内直接存数据,减少了内存申请次数,提升了cache命中率和内存的访问速度。

   => 

4.zend_parse_parameters 改为宏实现,性能提升5%

5.增加了4种opcode,call_user_function, is_int/string/array, strlen, defined 4个函数变为opcode指令,速度更快。

6.其他优化,例如,优化排序算法等。

待完善~

关于PHP7的更多相关文章

  1. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  2. 搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展

    上一篇:搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展 一.安装Memcached 1.yum安装libevent事件触发管理器 yum -y install libe ...

  3. Centos7安装PHP7

    安装依赖 yum updateyum install gcc-c++ libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel lib ...

  4. Ubuntu 16.04 LAMP server 指南 - 配置 Apache2.4,PHP7,和MariaDB(而不是MySQL)

    翻译自:https://www.howtoforge.com/tutorial/install-apache-with-php-and-mysql-on-ubuntu-16-04-lamp/ 昨天在虚 ...

  5. CentOS 7.1编译安装PHP7

    原文: https://typecodes.com/web/centos7compilephp7.html?utm_source=tuicool&utm_medium=referral 1 创 ...

  6. 编译安装PHP7并安装Redis扩展Swoole扩展

    编译安装PHP7并安装Redis扩展Swoole扩展 在编译php7的机器上已经有编译安装过php5.3以上的版本,从而依赖库都有了 本php7是编译成fpm-php 使用的, 如果是apache那么 ...

  7. php7 安装redis扩展

    从pecl下载的phpredis扩展在make时报错,google了一下,解决办法,因为phpredis 有专门为php7的分支,所以先git clone phpredis下来 git clone h ...

  8. 解决升级PHP7后 微信公众号收不到消息

    服务器配置Linux+Nginx+PHP5.5+mysql index方法配置微信的关注回复.菜单事件.多客服.自动回复等 public function actionIndex() { if (is ...

  9. mysql_connect() php7不支持,php5.5可以,是废弃函数

    天用了PHP7,发现和PHP5变化还挺大的,最大的就是MySQL的连接库变了. PHP5中使用mysql_connect()函数进行连接,但实际上,PHP5.5开始,MySQL就不推荐使用了,属于废弃 ...

  10. centos 7.2 安装PHP7.1+apache2.4.23

    安装准备:   http://ftp.cuhk.edu.hk/pub/packages/apache.org//httpd/httpd-2.4.23.tar.gz 下载apache http://cn ...

随机推荐

  1. Python中装饰器的用法

    定义: 装饰器本身就是一个函数 为其他函数提供附加功能 不改变源代码 不改变原调用方式 装饰器=高阶函数+嵌套函数 知识点: 函数本身就是一个变量(意味着可以被复制给一个变量:test=test(1) ...

  2. Android端 高德地图点击得到经纬度

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  3. MyBatis关联关系

    1.一对多:一个国家对应多个城市 01.实体类 package cn.pb.bean;import java.util.Set;/** * 国家的实体类 */public class Country ...

  4. 初步谈谈 C# 多线程、异步编程与并发服务器

    多线程与异步编程可以达到避免调用线程异步阻塞作用,但是两者还是有点不同. 多线程与异步编程的异同: 1.线程是cpu 调度资源和分配的基本单位,本质上是进程中的一段并发执行的代码. 2.线程编程的思维 ...

  5. Linux-Centos7----安装Python的psutil模块插件

    # wget https://pypi.python.org/packages/source/p/psutil/psutil-2.1.3.tar.gz # tar zxvf psutil-2.1.3. ...

  6. NET Core2.0 Memcached踩坑,基于EnyimMemcachedCore整理MemcachedHelper帮助类。

    DotNetCore2.0下使用memcached缓存. Memcached目前微软暂未支持,暂只支持Redis,由于项目历史原因,先用博客园开源项目EnyimMemcachedCore,后续用到的时 ...

  7. jquery ajax 返回的json对象 新增属性值(干货)

    $.ajax({ type:"GEt'; url:"你的地址", data:{"你的字段","字段值"} success:funt ...

  8. 1-6 hibernate映射集合属性

    1.集合类框架 以Tree开头都是按顺序,默认情况下是升序排列. 以Linked 开头的都是按插入顺序排列的. 2.在hibernate中要持久化集合属性时必须将其声明为接口,如 private Se ...

  9. HTML定位简介

    转载出处 定位一直是WEB标准应用中的难点,如果理不清楚定位那么可能应实现的效果实现不了,实现了的效果可能会走样.如果理清了定位的原理,那定位会让网页实现的更加完美. 定位的定义:在CSS中关于定位的 ...

  10. 最小化安装CentOS7的网卡设置

    实验环境:CentOS 7 Minimal Installation 64bit (1511) 最小化安装CentOS 7 后,查看网卡的信息让人很意外,因为网卡的命名规则变了,网卡的名字让人很难懂. ...