在Windows部署PHP应用性能欠佳
数年以来,PHP开发者或许可能会选择在Windows上进行开发工作,但却很少有人选择将PHP程序部署在Windows上。Serack表示,出现这个结果不是没有道理的。他表示,“当用户在Windows上高兴的运行一个PHP应用时,IIS可能会突然崩溃,而且没人知道其原因何在。现有PHP驱动器基于老协议,性能不高。而原因在于PHP社区缺少完善它所必需的信息。”
Serack认为,自从微软开发者了解到使用PHP语言可以开发第三方应用,微软就面临着一个新问题。微软逐渐开始意识到,开发者之所以不在Windows上部署PHP,原因是他们无法使用,并且微软内部的一部分人开始准备做出改变。自此之后,Serack的大部分时间都花在这个工作上。
微软改善Windows对PHP的支持
首先鼓励微软改善Windows对PHP支持的是SQL Server团队,它希望让现有开源应用可以更好的使用SQL Server驱动。也就是说,他们希望开发者在Windows上部署PHP应用时,使用SQL Server而不是MySQL,或者说至少是为了减少人们对自己的批评。2007年10月,首个新改进版的Windows PHP驱动发布。但却并未被开源社区所接受,于是SQL Server团队又再次对其进行修改,以实现人们真正想要的功能。
图 PHP运行在Windows Server 2008下:性能提高130%
非常自然,该团队希望把修改后的代码反馈给开源社区。据Serack表示,这意味着需要和微软法律团队进行多次沟通,才能获准共享该代码。这个法律过程花费了数月时间,因为对微软来说,开源代码依然是一件比较新鲜的事情。但并非微软自己才面临这种挑战,正如Serack所指出的那样,“每一个向开源社区共享代码的大公司都要经过类似的法律审批过程。”
不管怎样,在去年的OSCON大会上,微软向Adobe和其它项目提交了代码。Serack表示,“大约去年这个时候,微软开源软件实验室工作人员希望加速PHP在Windows上的开发。”当时Pierre Joye有空闲时间,因此微软让他与Serack共同实现以下目标:在Windows上完善PHP。
同时,Serack开始完善Windows PHP生成过程,重新为其编写脚本。由于涉及到如此多其它项目,他不得不创建工具后又重建更多工具。他表示,“我希望包含所有DLL。”他创建了一个跟踪工具,来跟踪正在被创建的内容,并创建了全新的Visual Studio项目文件。Serack欣慰的表示,“再也不需要make文件和定制批处理脚本了。”
仅仅通过上述改进,核心解释器基准测试的速度与PHP在Linux上运行速度的差距就缩小到1%以内。接下来,Serack创建了一个二进制工具,并通过它运行真实数据(也就是真正的PHP脚本),提供规范的数据给编译器。配置文件导引优化(Profile-Guided Optimization,PGO)是Visual Studio最酷功能之一,这一点已经被.NET开发者朋友所证实。这使其核心解释器的速度快了18%左右,而且未修改一行代码,只是修改了生成过程。
完善生成过程并不是一件没有意义的任务。让每一个模块使用相同且正确的设置被编译需要花点时间。Serack表示,“如果一个库使用不同的优化,它就不正常了。”
他表示,Joye还更换了一些老的程序库。举例来说,POSIX正则表达式函数库已经有大约10年历史。Serack表示,创建新版依赖库对性能有较大影响,但同时对可靠性也具有较大影响。
现在并非说该任务已经完全完成。所谓开源项目,或开发项目,就如同写长篇小说一样,编程永远不会完成,只有被放弃。Serack表示,“我们还正在进行一些努力。”举例来说,与Linux相比,Windows的文件系统实现有不同之处。而且他承认,“在现实世界应用中,在性能方面我们还难言成功。但是至少我们已经拥有了这个真正稳定的平台。”
有人或许认为:“微软?开源?承诺?你一定是在开玩笑。”Serack本人最初也不轻信这种态度。实际上,微软在进行Windows上的PHP改进时,故意保持非常低调的态度。Serack表示,“我们不想得罪别人,我们的目标是让PHP很好的运行在Windows上。我们希望对PHP作出共享,而不是分裂它。那是我们连想也不会想的事情。我们通过共享代码来参与到社区中,而非控制社区。”
Serack的目标就是简单的让PHP更好的运行在Windows上。他对开发者的反响感到激动,“太棒了!我已经拥有一个Windows服务器。现在我不用再买一台来运行我的PHP应用了。”
Serack十分欢迎来自PHP社区的帮助和建议;他希望人们能够发表自己的观点,谈谈如何在Windows上更好运行PHP,尤其是欢迎开发者提出能够帮助跟踪问题和优化的意见。他表示,“如果有错,让我们一起修改。”
Serack表示,“我们已经让人们做出选择,现在他们可以在Windows上部署PHP,并能够正常运行它们。”