关于PHP7
目前一直使用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的更多相关文章
- TODO:macOS编译PHP7.1
TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...
- 搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展
上一篇:搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展 一.安装Memcached 1.yum安装libevent事件触发管理器 yum -y install libe ...
- Centos7安装PHP7
安装依赖 yum updateyum install gcc-c++ libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel lib ...
- 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/ 昨天在虚 ...
- CentOS 7.1编译安装PHP7
原文: https://typecodes.com/web/centos7compilephp7.html?utm_source=tuicool&utm_medium=referral 1 创 ...
- 编译安装PHP7并安装Redis扩展Swoole扩展
编译安装PHP7并安装Redis扩展Swoole扩展 在编译php7的机器上已经有编译安装过php5.3以上的版本,从而依赖库都有了 本php7是编译成fpm-php 使用的, 如果是apache那么 ...
- php7 安装redis扩展
从pecl下载的phpredis扩展在make时报错,google了一下,解决办法,因为phpredis 有专门为php7的分支,所以先git clone phpredis下来 git clone h ...
- 解决升级PHP7后 微信公众号收不到消息
服务器配置Linux+Nginx+PHP5.5+mysql index方法配置微信的关注回复.菜单事件.多客服.自动回复等 public function actionIndex() { if (is ...
- mysql_connect() php7不支持,php5.5可以,是废弃函数
天用了PHP7,发现和PHP5变化还挺大的,最大的就是MySQL的连接库变了. PHP5中使用mysql_connect()函数进行连接,但实际上,PHP5.5开始,MySQL就不推荐使用了,属于废弃 ...
- 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 ...
随机推荐
- C#开发Open-Webkit-Sharp浏览器并支持前端alert显示
看了网上的很多教程,但是总是总是只言片语的,可能不同的人遇到的问题不一样,他们就只列举了自己的问题,那么这里我来做一下总结吧,跟大家分享一下我的完整的开发过程 首先你需要准备Visual Studio ...
- Spring与Akka的集成
概述 近年来随着Spark的火热,Spark本身使用的开发语言Scala.用到的分布式内存文件系统Tachyon(现已更名为Alluxio)以及基于Actor并发编程模型的Akka都引起了大家的注意. ...
- ccd采集
- AJAX跨域问题解决方法(3)——被调用方解决跨域
被调用方解决跨域是指在HTTP响应头中增加指定的字段,允许调用方调用 可以在两种地方增加1.apache/nginx(HTTP服务器)2.tomcat(应用服务器) 浏览器如何判断跨域?仔细观察可以发 ...
- Linq to sharepoint
一.Linq to SharePoint 首先Linq to SharePoint编程语言 C# 和 Microsoft Visual Basic .NET 的一个功能,编译器是 Visual Stu ...
- Java集合框架(一)
原文 http://www.jianshu.com/p/e31fb2600e4f 集合类存放于java.util包中,集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就 ...
- QTcreator打包发布可运行程序(基于QT5.7)
完成C++界面程序后,我们还需要对程序进行Release,然后进行打包,才可以直接运行.我在这期间绕了一个大弯,现在记录下来我的做法供参考. 正确步骤 第一步:将构建程序改为Release,然后构建项 ...
- delphi GDI 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法
delphi 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法 若有更好的,请大神留言我也学习下,感谢! uses WinAPI.GDIPAPI, WinAPI.GDIPOBJ; var Bi ...
- Django+xadmin打造在线教育平台(三)
五.完成注册.找回密码和激活验证码功能 5.1.用户注册 register.html拷贝到templates目录 (1)users/views.py class RegisterView(View): ...
- 笔记:Jersey REST 传输格式-JSON
JSON 类型已经成为Ajax技术中数据传输的实际标准,Jersey 提供了多种处理JSON数据的包和解析方式,下表展示了JSON包和解析方式: 解析方式\JSON支持包 MOXy JSON-P Ja ...