关于PHP和Java的问题

3
我想了解在性能方面,Tomcat上的Java(JSP)与Apache上的PHP相比如何。
两台具有相同硬件配置的服务器,一台运行Tomcat/Java(JSP),另一台运行Apache/PHP,两台服务器都达到最大连接数。它们是否会相差无几,还是其中一台会大幅领先于另一台?我只是想知道,如果我从PHP切换到Tomcat/Java(JSP),它是否会对性能产生很大影响。如果有人能详细回答为什么一种比另一种更快,那就太好了。链接也很好,出乎意料的是,我在网上找不到任何东西。
请勿进行Java vs PHP战争,这只关乎性能,与语言本身无关。
注意:如果我从PHP切换到Java还有其他需要考虑的问题,请告诉我。我真的很讨厌问这个问题,因为我通常是第一个说“用自己喜欢的编程语言”,但在我的情况下,我需要适合我的项目。我知道有很多用JSP编写的大型网站,但这并不意味着它们更好。
谢谢。
2个回答

15
您正在处理的项目越快完成,开发人员的时间比性能差异更显而易见的更昂贵,所以要坚持使用熟悉的工具。回答您的问题是:它们都足够快。任何这样的比较都很困难,因为你最终会在不同的语言中以不同的方式完成任务。Java字节码可能更快地解释,但同时,任何合理的PHP安装都使用了大部分opcode缓存,从而在实际情况下基本消除了任何这样的优势。Java也有一个更复杂的开发模型,因为Web进程是持久的。这可能具有性能优势,但也可能导致内存和其他资源泄漏等问题,而PHP则倾向于没有这些问题,因为每个请求都会创建和销毁一切(除了会话信息、memcache等)。此外,可以为任何您想加速的部分创建PHP扩展程序。 1万美元可以购买很多硬件,足以运行SO。但开发人员的时间就买不了多少了。我有做过Java和PHP开发的经验。通常情况下,我会选择PHP进行Web开发,因为它具有以下优点:
- 更快地测试开发中的更改(即没有构建/部署步骤,而Java热部署具有严重的限制)。通过在浏览器上单击重新加载所工作的文件来测试更改的自由度无法用语言表达。 - 较少的内存/资源泄漏问题; - 广泛的功能库,可以处理几乎任何您想要完成的任务; - 在低端主机上更便宜。
我会使用Java做一些事情,比如涉及大量背景处理和线程的任何事情,这些都不是PHP的强项。你会注意到性能(或其缺乏)甚至都不是支持或反对的原因。如果这没有回答您的问题,请谅解,因为担心性能是一个无意义的干扰。

我完全同意你的观点。虽然我已经使用Java编程很长时间了,但并不是因为我需要学习一门新语言。Java是纯面向对象的,它不是弱类型的,Java社区有着高标准等诸多优点。我只是感觉自己在把PHP变成Java已经具备的东西上花费了太多心血,如果这样说的话。 - William
看起来你在我评论后编辑了你的帖子。你有很多好观点。我也使用Java进行后台处理和线程处理。这是我开始写Java的主要原因,我开始喜欢它,想一直使用它。我真的希望PHP不是弱类型语言,而是一个纯面向对象的语言。看起来我可能还是会坚持使用PHP。 - William
@William:我实际上喜欢PHP是弱类型的事实。这是它吸引人的一部分。在Java中,你只需要写很多样板文件(比如ob.setXXX(other.getXXX())在层之间转换对象)。至于PHP和面向对象编程,在我看来,你不应该试图让PHP成为它不是的东西。它不是一个纯粹的面向对象语言(远非如此),但这实际上并不是坏事。 - cletus
我在我的函数中必须实际运行检查X方法,而我可以转到另一种语言让其为我完成这项工作,这是很烦人的。我整个问题的重点是,在PHP中我必须做额外的事情,而Java会为我做。这就是为什么我想要转换的原因,因为我不想尝试把PHP变成它不是的东西。我喜欢更加“严格”的语言,Java提供了这一点。但你也说了其他好的理由,我只能接受PHP。 - William
@William:我的观点是你不需要真的做这些事情。它们并不像你想象的那样必要。不要试图将PHP变成Java。如果你对于<插入“非Java”>感到不舒服,也许你应该使用Java。与普遍的看法相反,松散类型并不会导致世界末日。 - cletus
显示剩余2条评论

0

回答性能问题的最佳方式是使用基准测试。在PHP和Java中实现一些简单的页面,然后使用ab(Apache基准测试)进行基准测试。

话虽如此,我认为由于这两个平台的性质,Java将优于PHP。Java被编译为优化的字节码(一次),然后由虚拟机解释。当Tomcat运行时,JVM加载任何给定页面所需的类并将它们保存在内存中,因此当HTTP请求到达Web服务器时,它们已经准备好了。相比之下,PHP每次由Apache调用时都会重新加载和重新解释代码。尽管通过操作码缓存在很大程度上得到了帮助,但仍不及JVM的水平。


+1 感谢你回答问题。Cletus确实比你先回答了,并且还提到了一些对我做决定有帮助的事情。 - William
@William:谢谢。@cletus总是提供很好的答案。顺便说一下,你的评论写着“+1”,但我的回答没有被点赞:(我只是说一下... - Asaph
已修复,我不明白为什么它没有得到赞。对此感到抱歉。 :) - William

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接