PHP一直被人诟病性能差。虽然PHP 5.x版本一直在优化,但和其他语言(如Java、Go、Node.js)比起来,性能确实有差距。尤其是在高并发场景下,PHP-FPM的多进程模型开销大,内存消耗高,响应速度慢。

为了解决性能问题,Facebook开发了HHVM(HipHop Virtual Machine),用JIT(即时编译)技术把PHP代码编译成机器码执行,性能比官方PHP快好几倍。HHVM在Facebook内部大规模使用,也开源给社区使用,很多大网站(如维基百科)都迁移到了HHVM。

但HHVM毕竟不是官方PHP,兼容性有一些问题,而且维护成本高。PHP社区需要一个官方的高性能解决方案。PHP 7就是在这个背景下诞生的。

PHP 7的核心改进

PHP 7(开发代号PHPNG,PHP Next Generation)预计在2015年12月发布,这是PHP历史上最大的版本升级。核心改进包括:

第一,全新的Zend引擎。PHP 7重写了Zend引擎的核心部分,优化了内存管理和执行流程。新引擎使用了更紧凑的数据结构,减少了内存分配和拷贝,提升了缓存命中率。

第二,性能大幅提升。根据官方的基准测试,PHP 7的性能比PHP 5.6提升了一倍左右,有些场景甚至提升了两倍。这意味着同样的硬件能承载两倍的流量,或者同样的流量只需要一半的硬件。对于大流量网站来说,这能节省大量服务器成本。

第三,内存消耗减少。PHP 7的内存消耗比PHP 5.6减少了大约百分之三十到五十。这得益于新的内存管理机制和更紧凑的数据结构。内存消耗减少意味着同样的服务器能跑更多的PHP-FPM进程,并发能力更强。

第四,原生64位支持。PHP 5.x在64位系统上有一些问题,比如整数溢出、文件大小超过2GB处理异常等。PHP 7原生支持64位,这些问题都得到了解决。

第五,改进的错误处理。PHP 7引入了EngineException,把一些以前的致命错误(Fatal Error)改成了可捕获的异常,开发者可以用try-catch捕获和处理,而不是直接页面白屏。这大大提升了应用的健壮性。

第六,新的语法特性。PHP 7增加了一些新的语法特性,如返回类型声明、标量类型声明、空合并运算符(??)、太空船运算符(<=>)、匿名类等。这些特性让PHP代码更规范、更简洁、更现代。

对开发者的影响

PHP 7的发布,对PHP开发者来说是一个重大利好。

首先,性能提升意味着我们可以用PHP做更多事情。以前因为性能原因不敢用PHP做的场景(如高并发API、实时系统),现在可以考虑了。PHP的适用范围更广了。

其次,内存消耗减少意味着服务器成本降低。对于个人开发者和小公司来说,这意味着可以用更便宜的服务器承载更多的流量。对于大公司来说,这意味着可以节省大量的服务器开支。

再次,新的语法特性让PHP更现代化。返回类型声明、标量类型声明让PHP代码更规范、更易维护,也让IDE的代码提示更准确。空合并运算符、太空船运算符等让代码更简洁。

最后,PHP 7的发布可能会改变PHP的"性能差"形象。以前很多人看不起PHP,觉得它性能差、不专业。PHP 7用实力证明,PHP也可以很快、很专业。这会提升PHP社区的信心和影响力。

迁移注意事项

虽然PHP 7性能提升巨大,但迁移也需要注意一些问题:

第一,不兼容的变更。PHP 7有一些不兼容的变更,比如废弃了mysql扩展(要用mysqli或PDO)、废弃了ereg正则函数、一些函数的参数和返回值有变化等。迁移前需要仔细阅读官方的迁移指南,检查代码是否有不兼容的地方。

第二,扩展兼容性。PHP 7使用了新的Zend引擎API,第三方扩展需要重新编译才能使用。一些维护不活跃的扩展可能没有PHP 7版本,迁移前需要确认所有依赖的扩展都支持PHP 7。

第三,测试。迁移后需要充分测试,确保功能正常、性能达标。建议先在测试环境部署PHP 7,运行完整的测试用例,确认没有问题后再逐步迁移生产环境。

总结

PHP 7是PHP发展史上的里程碑,它用全新的引擎、翻倍的性能、更少的内存消耗,证明了PHP也可以很高性能。对于PHP开发者来说,这是一个令人兴奋的版本升级。

虽然PHP 7要到年底才正式发布,但现在已经有Alpha版本可以试用了。建议大家提前了解PHP 7的新特性和变更,为迁移做好准备。PHP的新时代,即将到来。