资讯专栏INFORMATION COLUMN

PHP7.1_新特性

xiao7cn / 3264人阅读

摘要:性能优化使用栈内存在引擎和扩展中,经常要创建一个变量,底层就是一个指针。而可以直接使用栈内存作用节省一次内存分配和管理存储值,查询不需要重复计算为字符串多带带创建了新类型叫做,除了指针和长度之外,增加了一个字段,用于保存字符串的值。

变量类型

PHP7版本函数的参数和返回值增加了类型限定。
原因:为了PHP7.1版本JIT特性做准备,增加类型之后PHP, JIT可以准确判断变量类型,生成最佳的机器指令。

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

PHP程序出错后,过去Zend引擎会发生致命错误并终止程序运行,PHP7可以使用try/catch捕获错误。

try {
    no_func();
} catch (EngineException $e) {
    echo "Exception: {$e->getMessage()}
";
}
性能优化
zval使用栈内存

在Zend引擎和扩展中,经常要创建一个PHP变量,底层就是一个zval指针。之前的PHP版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存。而PHP7可以直接使用栈内存.

PHP5

zval *val; MAKE_STD_ZVAL(val);

PHP7

zval val;

作用:节省一次内存分配和管理.

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

PHP7为字符串多带带创建了新类型叫做zend_string,除了char*指针和长度之外,增加了一个hash字段,用于保存字符串的hash值。数组键值查找不需要反复计算hash值

struct _zend_string {
    zend_refcounted gc;
    zend_ulog h;
    size_t len;
    char val[1]
}

优化数组的键值查找的性能。

hashtable桶内直接存数据,减少了内存申请次数,提升了Cache命中率和内存访问速度
zend_parse_parameters改为实现,性能提升5%
新增加4中OPCODE,call_user_funciton, is_int/string/array, strlen,defeind 4个函数变为 PHP OpCode指令
其它性能优化,基础类型int,float,bool等改为直接进行值拷贝,排序算法改进PCRE with JIT, execute_dataopline使用全局寄存器使用gdb4.8的PGO功能
PHP7与JIT

PHP7.0-final版本没有携带JIT特性

JIT是just in time 的缩写,表示运行时将指令转为二进制机器码。
对于计算密集型的程序,JIT可以将PHP的OpCode直接转换为机器码,大幅提升性能。

参考文档

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25963.html

相关文章

  • 【天赢金创】PHP7与Swoole

    摘要:但在密集计算方面比等静态编译语言差几十倍甚至上百倍。一使用栈内存在引擎和扩展中,经常要创建一个的变量,底层就是一个指针。代码中创建的变量也进行了优化,直接在栈内存上预分配。应用层与底层在错误抛出的方式全部统一为异常。 原文:http://rango.swoole.com/archives/440最近PHP官方终于发布了传说中的PHP7,虽然只是alpha版。PHP7号称是新一代的PHP...

    MingjunYang 评论0 收藏0
  • PHP7源码分析】PHP7到底有多快,基准测试与特性分析告诉你

    摘要:我们修改上面代码,再来看下返回值类型限制的情况运行结果这段代码我们额外声明了返回值的类型为型。对函数返回值的声明做了扩充,可以定义其返回值为,无论是否开启严格模式,只要函数中有以外的其他语句都会报错。 顺风车运营研发团队 王坤 发表至21CTO公众号(https://mp.weixin.qq.com/s/ph...) showImg(https://segmentfault.c...

    Towers 评论0 收藏0
  • 一步一步教你部署自己的 Laravel 应用程序到服务器

    摘要:包括安装与下载,证书申请与配置,升级到,服务器的简单配置。这对一个应用来说,所造成的后果无疑是毁灭性的。然后在新建一个目录,将刚才的文件放进去,便于统一管理其中红色框框的是要用到文件。 原文地址: here 在部署自己的博客到 LEMP 环境的时候,遇到了一些小挫折,现在把经验分享出来,让大家少走弯路。包括Php7.1安装与下载,SSL证书申请与配置,Mysql升级到5.7,Ngin...

    lolomaco 评论0 收藏0
  • Swoole笔记(一)

    摘要:修复添加超过万个以上定时器时发生崩溃的问题增加模块,下高性能序列化库修复监听端口设置无效的问题等。线程来处理网络事件轮询,读取数据。当的三次握手成功了以后,由这个线程将连接成功的消息告诉进程,再由进程转交给进程。此时进程触发事件。 本文示例代码详见:https://github.com/52fhy/swoo...。 简介 Swoole是一个PHP扩展,提供了PHP语言的异步多线程服务器...

    SHERlocked93 评论0 收藏0
  • PHPRAP v1.0.6 发布,修复因php7.1版本遗弃mcrypt扩展造成安装失败的BUG

    摘要:,是一个轻量级开源接口文档管理系统,致力于减少前后端沟通成本,提高团队协作开发效率,打造版的。官方网站演示网站作者博客官方群 PHPRAP,是一个PHP轻量级开源API接口文档管理系统,致力于减少前后端沟通成本,提高团队协作开发效率,打造PHP版的RAP。 更新记录 【修复】修复因php7.1版本遗弃mcrypt扩展造成安装报错的BUG 【修复】修复在PHP7.1下因缺少默认参数而报...

    booster 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<