这是我一直想知道的:为什么PHP比Java或C#慢,如果这三种语言都被编译成字节码然后从那里执行?我知道通常PHP会根据每个请求重新编译每个文件,但即使你将APC(字节码缓存)带入图片中,性能也远不及Java或C#(尽管APC大大改进了它)。
编辑: 我甚至没有在网络层面谈论这些语言。我在谈论他们数字运算时的比较。甚至不包括启动时间或类似的东西。
另外,我不是根据这里的回复作出某种决定。 PHP是我的首选语言;我只是对它的设计感到好奇。
答案 0 :(得分:39)
其中一个原因是PHP中缺少JIT编译器,正如其他人所提到的那样。
另一个重要原因是PHP的动态类型。动态类型语言总是比静态类型语言慢,因为在运行时而不是编译时检查变量类型。因此,像C#和Java这样的静态类型语言在运行时会明显更快,尽管它们通常必须提前编译。 JIT编译器使得动态类型语言不再是一个问题,但唉,PHP没有内置的(虽然请参阅Facebook的HHVM以获取PHP的第三方JIT示例。)
答案 1 :(得分:9)
我猜你在这里比较了苹果和橘子 - 假设你使用所有这些语言来创建Web应用程序,它还有很多不仅仅是语言。 (很多时候,数据库正在减慢你的速度; - )
我绝不会建议在 speed 参数的基础上选择其中一种语言。
答案 2 :(得分:5)
Java和C#都有JIT compilers,它接受字节码并编译成真正的机器代码。编译它的行为可能需要一些时间,因此C#和Java可能会受到较慢的启动时间的影响,但是一旦代码被JIT编译,其性能就像任何“真正编译”的语言(如C ++)一样。
答案 3 :(得分:4)
最大的原因是Java的HotSpot JVM和C#的CLR都使用即时(JIT)编译。 JIT编译将字节码编译为直接在处理器上运行的本机代码。
此外,我认为Java字节码和CIL比PHP的内部字节码低,这可能使JIT优化更容易,更有效。
答案 4 :(得分:2)
一个疯狂的猜测可能是JAVA依赖于某种“应用程序”服务器,而PHP则不然 - 这意味着每次调用PHP页面时都必须创建一个新的环境。
(当PHP被用作CGI,而不是作为Apache模块或通过FastCGI时,尤其如此)
另一个想法可能是C#和JAVA编译器可以在编译时进行一些重要的优化 - 另一方面,因为PHP脚本是编译的(至少,如果你没有“欺骗”操作码缓存)< / em>每次调用页面时,编译阶段必须快速;这意味着不可能花太多时间进行优化。
仍然:每个版本的PHP通常会带来一些改进的性能;例如,当从PHP 5.2切换到5.3时,您可以获得15%到25%的CPU。
例如,看看那些基准:
另外一个重要的事情是,PHP很容易扩展:只需添加几个Web服务器,瞧!
从1到多个服务器时经常遇到的问题是会话 - 将它们存储在DB或memcached (非常简单)中,问题解决了!
作为旁注:我不建议选择一项技术,因为某些基准测试的速度差异有几个百分点:还有更重要的因素,比如你的团队对每种技术的了解程度 - 或者甚至是你的算法打算用!
答案 5 :(得分:0)
在琐碎的条件下,解释语言无法比编译语言甚至JIT语言更快。
除非您的测试程序包含打印出“Hello Worlds”,如果您关注速度,请坚持使用C#或Java。
答案 6 :(得分:-2)
取决于你想做什么。在某些情况下,PHP肯定更快。 PHP(非常)擅长文件操作和其他基本的东西(也是XML的东西)。在这些情况下,Java或C#可能会更慢(尽管我没有基准测试)。
此外,PHP输出(HTML或其他)需要下载到浏览器,这也耗费时间。
此外,Java / C#的速度在很大程度上取决于它运行的机器(可能是多个)。 Java / C#可能在您的计算机上运行缓慢,而PHP只在一台可用的服务器上运行,并且始终与服务器一样快(下载时间除外)。
我不认为它们在一般方面具有可比性。我认为您需要完成一项任务,您可以使用这三种编程语言完成这项任务,然后进行比较。这基本上总是在选择编程语言时应该做的事情;找到适合任务的那个。在适合编程语言之前,不要塑造任务。
答案 7 :(得分:-3)
根据wikipedia,PHP使用The Zend Engine,does not have一个JIT。