来源:InfoQ中文站
越来越多的迹象表明PHP与Java/JEE开发社区的关系越来越密切,越来越明显。IBM和Caucho都为Java上的PHP架构进行了巨大的投入。Sun、Oracle和BEA在过去的18个月中,也都宣布了集成PHP或者与Zend建立伙伴关系。Jerry Cuomo(IBM的WebSphere CTO)和Scott Ferguson(Resin Java Application Server及最近的Quercus PHP引擎)与我们一起讨论了PHP如何融入Java的世界。目前IBM在Java/PHP混合系统方面最直接的投入是Project Zero,一个开发中的新的Web框架,支持Groovy和PHP脚本语言。当被问到为何IBM选择在Project Zero项目里支持PHP,Jerry有些话要说: 逆风者
Jerry:三个词——敏捷性(Agility)、内容(Content)、训练(Educated)。是的,PHP是我们的ACE。
敏捷性(Agility)。J2EE应用是为了“永久的价值”而优化的……也就是说,写出来的程序是打算要一直运行下去。PHP脚本是为了“在周五之前投入运行”而优化的。也就是说,PHP让你快速简洁地编写代码,这对于许多应景而生的应用是合适的。
内容(Content)。我们叫它“剪贴式编程”。网上有不计其数的PHP资源。你很少需要从头开始编写什么东西。搜索,剪切,粘贴,你就可以收工了……(这又涉及到敏捷性)。
训练(Educated)。PHP很容易自学。编写PHP脚本对很多人来说都非常容易,即使是没有受过正规计算机科学教育的人。例如,像内存管理和线程这种复杂的东西,在你编写PHP脚本的时候绝不会成为注意力的中心。而且就如我在上一点所说,大多数时候你都是在修改利用别人的代码。
Caucho采取的途径与IBM不同。Project Zero看起来好像是一个Java/Groovy框架,只不过刚好也支持PHP语言。而Quercus,是能够与mod_php竞争的完整的PHP语言实现。它是一个令人印象深刻的实现。事实上整个PHP解释器都是用Java编写的,因此不仅能够提供原生的Java/PHP集成,还有效利用了JVM的强大能力来达到极高的效率和安全性。对于从技术的角度看,Java如何令Quercus脱颖而出,Scott如是说:
Scott:Java平台的线程、缓存和池技术是Quercus成功的关键。大多数Quercus库的实现都只是对相应Java功能的包装。例如,数据库访问就是对JDBC的包装。因为Java平台已经提供了坚实的基础,Quercus不费吹灰之力就得到了那些强大的能力。
而且反射、内存管理、JDK 1.5 Annotation和动态编译/类装载,这些都是Quercus所需的。虽然我们不能像C PHP一样使用智能指针来编程,我们却可以获得干净的OO设计,并依赖Java去处理内存的问题。
当然还有运行分析(profiling)。Quercus自动从JVM的CPU和堆运行分析中得益。因为编译后的Quercus函数实际上就是Java方法,我们可以准确地从运行分析中看出哪一块代码运行得太慢或者消耗了太多内存。
快速、轻量并且广泛接受的Web层框架一直是Java平台难以完成的目标,我们向Jerry和Scott两人都提出了同一个问题:他们投入于PHP运行时的领域,是否由于感觉到Java社区已经放弃了使用基于Java的框架来完成高效Web层开发,转而在这一层使用动态脚本语言。他们都认为我的提问夸大了弃用Java的趋势,他们如此描述使用Java和使用PHP之间的平衡:
Jerry:“转移”和“放弃”的说法有点过了。我觉得应该说我们正“把Java提升到更高级的行政职位上”。Java自己赢得了这样的位置。这并不是一个非黑即白的问题。除了Java目前的角色,我相信它可以成为这些动态脚本语言的“系统编程”环境。就像Java与C/C++的关系。现在Java(以及JVM)需要成长(和退缩)来支持各种DSL。例如,当今的Java是为长期运行的应用和进程而优化的。DSL则是短命的,经常来来去去。
Scott:我们不建议完全抛弃Java。Web应用框架底下的基础设施如Spring、JPA/Hibernate,工具如Coherence,测试框架如JUnit,Java在这些方面是无与伦比的,远胜过脚本世界中任何东西。除此之外,应用级缓存、服务、事件和线程这些不为人所见的东西用Java会好得多。如果你看看像Mediawiki(维基百科所用的程序)这样的PHP应用,可以明显地看出底层代码如果用Java编写会好很多。
本文章更多内容:1 - 2 - 下一页>> |