7

变量类型

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()}\n";
}

性能优化

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直接转换为机器码,大幅提升性能。

参考文档


alogy
1.3k 声望121 粉丝

// Designer and Developer


« 上一篇
CSS_一些问题
下一篇 »
网站优化