PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

栏目: PHP · 发布时间: 8年前

内容简介:PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

TIOBE 2017 年度编程语言榜单已 出炉 ,世界上最好的语言 PHP 再度无缘年度编程语言。

距离其上次(2004 年)获得年度编程语言,已有 13 年之久。而从历年 TIOBE 编程排行榜趋势图也可以看到,自 2014 年以来,PHP 总体处于持续下滑趋势。

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

作为世界上最好的语言,PHP 的霸主地位会被撼动吗?

据 W3Techs.com 的数据显示,近年来,有超过 80% 的网站在服务器端的编程语言选择了 PHP,一门语言流行的背后必会有其原因,PHP 一开始凭借其简单上手而流行起来,而持续流行了这么多年,我们相信不仅仅是由于它的易于使用,作为一门服务器端的语言,如果性能没有足够好,很难一直被流行至今。

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

下面,我们不妨回顾下 PHP 的性能是如何演进的。

PHP 的性能演进历史

PHP 是 Web 开发最常用的语言,自 1994 年 Rasmus Lerdorf 创建 PHP 以来,PHP 语言经历了许多激烈的改进,其中性能是开发人员在评估新版本时考虑的主要标准之一。每个大版本的更新都会带来很多新特性和性能提升。

有关 PHP 性能改进的主要版本历史:

  • 1994 :Rasmus Lerdorf 为了维护个人网页而制作了一个简单的用 Perl 语言编写的程序,称为 Personal Home Page
  • 1995 :Rasmus Lerdorf 用 C 语言对"Personal Home Page"进行重新编写,包括可以访问数据库,并于 1995 年 6 月 8 日发布了首个公开版。这是 PHP 1.0 版本,也是第一次使用了"PHP"的名字
  • 1997 :Rasmus Lerdorf、Andi Gutmans 和 Zeev Suraski 加入了该语言的第三个版本的开发,并进行根本性的重新设计,性能大大提升。从那之后, PHP 开发组也创建并发展起来。PHP 也在这个时候改称为 PHP:Hypertext Preprocessor
  • 2000 :以 Zend Engine 1.0 为基础的 PHP 4 正式发布,自此,PHP 的性能才开始变得正式起来
  • 2004 :发布了 PHP 5,PHP 5 使用了第二代的 Zend Engine。PHP 包含了许多新特色,如强化的面向对象功能、引入 PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强
  • 2015 :12 月 3 日,PHP 7.0 正式发布,使用的 Zend Engine 3 带来了 100% 的性能提升,还有统一的变量语法,基于抽象语法树编译过程

可以看到,于 2015 年发布的 PHP 7 在性能方面取得了重大的突破。该版本最大的改进莫过于无感知的 100% 性能提升,其中包含了运行速度与内存消耗。与 PHP 5 相比,PHP 7 的综合性能提升了一倍以上。

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

PHP 7 带来的性能飞跃让开发者获益良多,使得很多应用受益,也使得 PHP 的应用场景变得更加广泛。

那么下一步 PHP 的性能提升方向是什么?下文将分享 PHP 下一个性能提升的主要举措:JIT 的进展,以及下一个大版本的 PHP 可能带来的特性。( 整理出自:2017 年 OSC 源创会年终盛典鸟哥演讲《PHP Next: JIT》)

鸟哥表示,从 PHP 7 发布到现在,在提交一些关于性能提升的工作时,阻力会变得小很多。可以说,PHP 7 是开启了 PHP 性能发展方向的一个风潮。

事实上,为一个有长远历史的程序做优化的难度比推倒重构更高。PHP 7 在性能方面带来了跨越式的提升,如果能够将这些成果应用到使用 PHP 的 Web 系统中,也许只需要更少的机器,就能支撑起更高请求量的服务。

PHP 7 之后会有什么 —— JIT

这是一个十分值得我们期待的版本,目前由 Zend 引擎的 Dmitry Stogov 主导。虽然它是基于 PHP 7.1 版本,但实际版本号尚未确定。

JIT是什么?为什么是 JIT?

JIT (Just-In- Time 即时编译) 并非是新技术,很多语言例如 Java 早已实现。JIT 的思想很简单,即在程序运行时动态对程序进行编译,生成平台相关的机器码(比如运行它的机器 CPU 的本地代码),从而加快程序的运行速度。

为什么是 JIT?

不妨先来看看 PHP 文件的执行流程。PHP 文件的执行流程大致是首先引擎加载 PHP 文件,解释器逐条解释执行代码。

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

引入 JIT 后,前面部分一样,重点是 JIT 编译器会根据 Runtime 信息对热点代码进行动态编译生成机器码,此后这部分代码就可以直接执行,不再需要解释器逐条解释执行,因此运行效率会得到提升。

Facebook 开源的 PHP 虚拟机 HHVM(HipHop Virtual Machine) 就采用了 JIT,这让他们的 PHP 性能测试结果提升了一个数量级,也让开发者意识到 JIT 是一项点石成金的强大技术。HHVM 也是目前最热门的带 JIT 编译器的 PHP 实现。

PHP 7.1 引入了类型推断

而 PHP 要想实现 JIT,必须要解决变量的类型推断这个难题。试想,如果在动态编译时仍需要进行大量的类型检查,性能将会大幅下降。

PHP 7.1 引入了一个称作“类型推断”的特性,这是现阶段正在实现的 JIT 的前驱,但它不是单独开发的,2013 年的 PHP 5 已经实现了一套推断系统,7.1 嵌入了这套系统并对其进行优化。

PHP 7 中已经可以控制变量的类型,7.1 对这个机制进行了完善。我们甚至可以说目前的 PHP 已经是半强类型语言,但由于 PHP 的弱类型语言历史,目前仍有大量代码在运行前无法得知变量类型,所以在 7.1 中 PHP 的开发者进行了大量变量类型推断的工作,为后续的 JIT 实现打下基础。

对变量进行推断,目前比较简单的一种办法是数据流分析,即分析代码的上下文,从而推断出变量的可能类型,比如:

function calc ($a1, $b2) {        // $a1: [ANY], $b2: [ANY]
    $T3 = $a1 * 2;                // $T3: [LONG, DOUBLE]
    $a4 = $T3 % 1000;             // $a4: [LONG]
    $T5 = $b2 * 3;                // $T5: [LONG, DOUBLE]
    $b6 = $T5 % 1000;             // $b6: [LONG]
    $T7 = $a4 + $b6;              // $T7: [LONG, DOUBLE]
    return $T7;
}

对于这项改进,目前依然有较多的困难,鸟哥表示他们的解决思路是对 JIT 进行分级,通过配置实现不同程度的动态编译,从而降低类型预测的难度。此外,针对具体的场景,进行垂直优化。除了基于数据流的分析,PHP 7.1 还会基于分支进行判断。

PHP 7.2 继续提升性能并完善类型推断

PHP 7.2 不久前也已发布,与 7.1 相比,它的性能有大约 10% 的提升。7.2 在数据流分析里引入了三个新特性。

  • sparse conditional constant propagation
  • 逃逸分析
  • 移除“死代码”(消除没有副作用的代码)

PHP 7.2 还包括对基于分支预测的优化,此外,还引入了称为"HYBRID VM"的虚拟机引擎。

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

关于 JIT 性能表现的一些数据

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

那么,JIT 性能的提升效果表现如何?这要取决于项目的实际瓶颈。鸟哥表示,JIT 对性能提升要看具体的情景,如果某段逻辑是计算密集型的,它的提升大概有 1/4,不过也有一些性能提升不明显的场景,如果在 IO 密集型场景下进行测试,性能的提升不会很明显,所以一定要考虑具体的使用场景。

此外,鸟哥表示,将来如果要写出更友好的代码,不妨考虑多添加一些类型提示。

最后

TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,名次的下降一定程度反映了当前编程语言的流行趋势,但不能成为衡量一门语言是否优秀的唯一标准。有些编程语言受众领域较小,难以达到大范围的推广普及,但在它所专长的领域,发挥着独有的优势。

PHP 在服务端编程语言领域依旧占据主导地位,同时,PHP 社区组持续不断地做版本迭代更新,性能提升。下一个大版本将引入 JIT 特性,这个被奉为点石成金的技术会给 PHP 带来更好的性能,更大的发展吗?

参考:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro CSS and HTML Design Patterns

Pro CSS and HTML Design Patterns

Michael Bowers / Apress / April 23, 2007 / $44.99

Design patterns have been used with great success in software programming. They improve productivity, creativity, and efficiency in web design and development, and they reduce code bloat and complexit......一起来看看 《Pro CSS and HTML Design Patterns》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试