大家都知道,Facebook、淘宝等早期都是用PHP写的,在中国,PHP在百度、新浪、腾讯这三大互联网公司中应用比较多。
自1995年由丹麦人Rasmus Lerdorf(雷斯莫斯·勒道夫) 创建 PHP 以来, PHP 语言经历了激烈的演进。
PHP/FI - 1995年
摘要:用Perl写的小工具
PHP 继承自一个老的工程,名叫 PHP/FI。PHP/FI 在 1995 年由 Rasmus Lerdorf 创建,最初只是一套简单的 Perl 脚本,用来跟踪访问他主页的人们的信息。它给这一套脚本取名为“Personal Home Page Tools”。
Rasmus Lerdorf(雷斯莫斯·勒道夫)
PHP/FI 2.0 - 1997年11月
摘要:用C语言重写了PHP/FI
到1997年,PHP/FI 2.0,也就是它的 C 语言实现的第二版在全世界已经有几千个用户(估计)和大约 50,000 个域名安装,大约是 Internet 所有域名的 1%。但是那时只有几个人在为该工程撰写少量当代码,它仍然只是一个人的工程。PHP/FI 2.0 在经历了数个 beta 版本的发布后于 1997 年 11 月发布了官方正式版本。
PHP3 - 1998年6月
摘要:两位以色列开发者加入,重新命名
PHP 3.0 是类似于当今 PHP 语法结构的第一个版本。两位以色列人Andi Gutmans 和 Zeev Suraski 在为一所大学的项目中开发电子商务程序时发现 PHP/FI 2.0 功能明显不足,于是他们重写了代码。这就是 PHP 3.0。经过Andi,Rasmus 和 Zeev 一系列的努力,考虑到 PHP/FI 已存在的用户群,他们决定联合发布 PHP 3.0 作为 PHP/FI 2.0 的官方后继版本。而 PHP/FI 2.0 的进一步开发几乎终止了。
PHP 3.0 的一个最强大的功能是它的可扩展性。除了给最终用户提供数据库、协议和 API 的基础结构,它的可扩展性还吸引了大量的开发人员加入并提交新的模块。后来证实,这是 PHP 3.0 取得巨大成功的关键。PHP 3.0 中的其它关键功能包括面向对象的支持和更强大和协调的语法结构。
这个全新的语言伴随着一个新的名称发布。它从 PHP/FI 2.0 的名称中移去了暗含“本语言只限于个人使用”的部分。它被命名为简单的缩写“PHP”。这是一种递归的缩写,它的全称是——PHP: Hypertext Preprocessor。
约九个月的公开测试后,官方于 1998 年 6 月正式发布 PHP 3.0。
Andi Gutmans(安迪·古特曼斯)
Zeev Suraski(齐弗·苏拉斯基)
PHP4 - 2000年5月
摘要:引入“Zend Engine”并成立了Zend公司
1998 年的冬天,PHP 3.0 官方发布不久,Andi Gutmans 和 Zeev Suraski 开始重新编写 PHP 代码。设计目标是增强复杂程序运行时的性能和 PHP 自身代码的模块性。PHP 3.0 的新功能和广泛的第三方数据库、API的支持使得这样程序的编写成为可能,但是 PHP 3.0 没有高效处理如此复杂程序的能力。
新的被称为“Zend Engine”(这是 Zeev 和 Andi 的缩写)的引擎,成功的实现了设计目标,并在 1999 年中期首次引入 PHP。基于该引擎并结合了更多新功能的 PHP 4.0,在 PHP 3.0 发布两年后,于2000年5月发布了官方正式版本。除了更高的性能以外,PHP 4.0 还包含了其它一些关键功能,比如:支持更多的 web 服务器;HTTP Sessions 支持;输出缓冲;更安全的处理用户输入的方法;一些新的语言结构。
Zend是PHP公司,成立于1999年,由Zeev Suraski and Andi Gutmans两位开源PHP的缔造者和建筑师共同创建,因此有了Zend名称的由来。由于他们的国际技术的权威性,Zend公司和他的创建者在PHP以及开源团体中持续处于领导的核心地位,对于PHP的迅猛发展起到了强力推动作用。Zend公司是一个PHP应用的企业和个人都可以寻求到专业技术解决方案的PHP领先公司。
——摘自百度百科
PHP5 - 2004年7月
摘要:PHP面向对象
PHP 5 在长时间的开发及多个预发布版本后,于 2004 年 7 月发布正式版本。它的核心是 Zend 引擎 2 代,引入了新的对象模型和大量新功能。
虽然 PHP 5.0 没有带来实质性的性能提升,并且在某些情况下甚至比 PHP4 更慢,一个由 Dmitry Stogov 领导的团队在社区的大力帮助下已经在后续版本中不断优化语言,在 PHP 5.6 发布的时候,在大多数情况下,性能提升在 1.5x 和 3x 之间。
PHP NG - 2014年
摘要:废弃的PHP6和寄希望于下一代的PHP NG分支
PHP6 的开发开始于2005年,曾立志要让PHP支持Unicode字符串。但是它的进展过于缓慢又出现了很多的问题,然而开发停滞不前,PHP 6计划在2010年被取消了。由于PHP6的分支被占用了,不久后Zend的Dmitry Stogov 发布了PHP的一个名为PHPNG(PHP Next-Gen)的分支。
PHP NG (你要愿意的话叫 PHP 5.7 也行)关键是仍保持对 PHP 5.6 的兼容性。
俄罗斯人Dmitry Stogov 在2014年年1月中旬的 首次发布 以及5月初的 里程碑更新 后对 PHP 速度的提升有着越来越多的思路(特别贡献者来自 中国人Xinchen Hui , Nikita Popov 等).
到了7月中旬这些努力终于有了结果,测试表明开发中的版本性能对比 PHP 5.6 有着近乎 1 倍的提升。测试是在渲染 WordPress 3.6 前端页面上进行的。
同样的页面,PHP 5.6 渲染 1000 次耗时 26.756 秒,而 PHP NG 耗时 14.810 秒。
此次性能提升的秘诀在于将近 60% 的 CPU 指令被替换成更高效的代码。PHP 5.6 执行 100 次渲染需要 9,413,106,833 个 CPU 指令,而 PHP NG 只需 3,627,440,773 指令。
因为多数扩展都可支持 PHP NG,因此你可以轻松的构建自己的环境进行测试。
PHP7 - 2015年12月
摘要:性能对比 PHP 5.6 有着近乎 1 倍的提升
PHP 7基于PHP NG项目(PHP Next-Gen),自从PHP NG开源且合并为PHP 7后,性能就持续增长和改善,它通过Zend加速PHP,使得PHP 7性能有很大提升。2015年,基于PHPNG项目(PHP Next-Gen)PHP7正式发布。主要目的在于提升PHP性能。
(Dmitry Stogov)德米特里·斯托戈夫
惠新宸
2015 年 12 月, PHP 7.0 取得了重大突破。 2016 年 12 月,7.1 版本也带来了一系列增强功能。目前,PHP7有3个功能版本,分别是7.0.x,7.1.x,7.2.x,开发者该如何选择它们呢?
- PHP7.0.x相对于之前的版本主要是性能上进行了提升,官方公布的数据性能可以提升一倍。
- PHP7.1.x更多的是对7.0.x未完成的工作的一个补充。
- PHP7.2.x 相对于 PHP7.1.x 主要优化也是在 opcache。
这样说大家应该明白了吧。
PHP 7.1 相比 7.0 来说,做的最大的工作,就是一个类型推断系统加一个类型相关的中间代码执行引擎。这个不是新的工作,在2013年我们做 PHP 5.5 的 JIT 的时候类型推断系统已经做出来了,但当时把这个项目停掉了,现在把那项工作其中的类型推断部分拿过来,放到 7.1 。基于这个类型推断未来还可以做更多的东西。PHP 7.1 更多的是对 7.0 未完成的工作的一个补充。
番外篇:Fackbook的HHVM
在2008年,Facebook 启动了一项工作,计划开发一个工具 将 PHP 脚本转换成 C++,这样就可以被编译后在 web 服务器上运行。目的是节省服务器资源,这是一个很重要的目标,因为 Facebook 的用户量正在快速增长。从这个意义上讲,这个项目是成功的,因为它可以让服务器处理之前五到六倍的请求量。
时间回到2010年,Facebook 的服务器需求已经增加了很多,是时候考虑用新的创新来提升更大的效率。基于这个需求,Facebook 开发了 HHVM (HipHop Virtual Machine) — 一个运行 PHP 代码的虚拟工具。
HHVM 使用了 Just-In-Time (JIT) 编译方式将 PHP 代码转换成某种字节码。接下来把字节码再转换成机器码并进行优化,让它尽可能快的运行。