PHP7出去了。这已经不是什么新闻。从那时起,它自去年十二月被淘汰,有九个小的修改。最新消息是,它服务于所有Wayfair面向客户的业务。

性能方面,PHP7是火箭船人说这将是。我们只是感到高兴。如果你可以升级,你应该做的是昨天。几乎没有任何改变我们的代码,网页约一半渲染时间。CPU占用率下降了约30%。

是什么让我们只是高兴的部分是,我们还没有到翻转开关后滚任何东西。对于背景下,Wayfair的PHP存在3.5M控制线超过28K的文件。编码约定跨越PHP的几个版本。有第三方软件包(作曲家和其他)的类似的多元化。我们还可以使用66个PHP扩展 - 也就是C / C ++ - 包括一些分叉第三方和一些完全自定义代码。我们为30M +独立访问者来自世界各地的一个月。

在某种程度上,升级到PHP7较少有关的语言和更多的测试代码库复杂。测试是动态类型语言中一个棘手的事情。在说明明显的风险,这意味着每个错误将是一个运行时错误。这是伟大的快速发展,但让人难以保证代码的“正确性”。

这里有一个简短的指南升级,因为我们经历过。因人而异。

规划

第一步是拿到土地的外行。使用PHP的内置插件(phpinfo()函数或'PHP -i`)来找出你依靠哪些扩展以及它们如何配置。请参阅官方迁移指南并在goPHP7笔记扩展兼容性

一个体面的心理地图,你可以grep自己的方式兼容性修补的punchlist。例如,明知额日格扩展已被删除,应用/ \ B(ereg_replace |额日格| eregi_replace | eregi |分| spliti | sql_regcase)(/你的代码库。

静态分析

有几个方法可以检查你的代码,但不运行它。上面的grep的例子是,从技术上来讲,静态分析的一种形式。你可以用`PHP -l`检查基本语法。php7mar将一对检查用共同迁移陷阱一组其他(主要是正则表达式为基础)。

如果你想更坚固,HHVM您的代码进行真正的静态分析。(什么这包括藩自述列出的实例)这是一个诱人的概念 - 结婚与PHP的灵活性强类型语言的严谨性 - 但它可能是不完美的实践中。我们使用HHVM与PHP5.6,并发现它难以维持与我们的构建过程。我们测试藩和有大约误报和我们的代码库老化其他噪声的担忧。这并不是说任何工具将没有价值你,但他们需要一些细致的评估。

自动化测试

自动化测试有着不同的形式:单元测试,集成测试,浏览器测试。有在这个世界上没有万能的真理。这在很大程度上取决于你的团队是如何工作的。但是编纂,可重复的测试可以揭示微妙的回归这可能会影响您的客户。

重播测试

使用网络日志,你已经有关于人们如何使用您的产品的其他信息。没有单元测试覆盖率?没问题!坐了一天的价值的URL和卷曲测试服务器。当然,你需要的是手段,能够检测出问题时。

监控

您的应用程序已经有一个安全网?对于大型系统的变化做准备时记录和报警是无价的。(真的,他们是非常宝贵的,时间。如果你的应用程序没有监控的地方,停止阅读这一点,并设置它。树能够倒在树林里没有发出任何声音。)

压力测试

你铺开真实流量之前,尝试锤击测试服务器ApacheBench。你可能有,直到你在并行应用负载未透露内存分配问题的延伸。

扩展

编写自定义扩展是小众的活动,而是一个呈现显著的测试负担。PHP的内部有有点 - 的苗条的数据结构背后PHP变量是多在PHP7速度上涨的实际负责 - 虽然有代码在那里与一些变化帮助。的一个强大的套件.phpt测试,用Valgrind的运行,是非常宝贵的。代码覆盖工具,例如gcov的,可以帮助验证测试的广度和深度。沙盒开发环境,如php7dev流浪汉盒,可以简化您的过程。

即使你不滚动你自己的,你可以依靠PECL或其他第三方扩展。您可能需要测试用例隔离,以帮助指导别人。基本的舒适与捕获和检查核心转储可以在这里很长的路要走。

社区

如果遇到问题,不要忘了现有的PHP bug跟踪系统。这是一个很大的社区,所以它不是不可能的,别人已经有你的问题。按照maillists。有一个整体套房PHP的核心。第三方扩展和库可能有自己的。熟悉GitHub的仓库任何第三方代码。PHP7还是比较新的。一个bug修复,你需要可能仍然在一个稳定的版本。

总之,请记住,开源项目的工作,当你退给他们。188金博宝备用在maillists分享调查结果,提交错误报告,提交补丁改进。

当你完成

一个大问题是如何确定当你测试的东西刚刚够。没有一种方法是完全综合。收益递减是生活中的事实。我们没有做任何事情,在这个部门尤为特别。我们保持着良好的笔记,记录问题,因为他们站起身来,在工作组内确保低摩擦通信。在某一点,你 - 组,你 - 会感到舒适足够用的东西转移到下一步的状态:要求手工测试人员来一看,一开始压力测试,锻炼你的部署脚本,最后,分享你的与世界合作。