是什么让PHP比Java或C慢?

是什么让PHP比Java或C慢?,php,language-design,Php,Language Design,这是我一直想知道的:如果这三种语言都被编译成字节码,然后在那里执行,为什么PHP比Java或C慢?我知道,通常PHP会在每个请求中重新编译每个文件,但即使将APC(字节码缓存)引入到图片中,性能也远不及Java或C#(尽管APC极大地提高了它) 编辑: 我甚至没有在网络层面上谈论这些语言。我说的是它们在计算数字时的比较。甚至不包括启动时间之类的 另外,我不是根据这里的回复做出某种决定。PHP是我选择的语言;我只是对它的设计很好奇。一个猜测可能是JAVA依赖于某种“应用程序”服务器,而PHP不依赖

这是我一直想知道的:如果这三种语言都被编译成字节码,然后在那里执行,为什么PHP比Java或C慢?我知道,通常PHP会在每个请求中重新编译每个文件,但即使将APC(字节码缓存)引入到图片中,性能也远不及Java或C#(尽管APC极大地提高了它)

编辑: 我甚至没有在网络层面上谈论这些语言。我说的是它们在计算数字时的比较。甚至不包括启动时间之类的


另外,我不是根据这里的回复做出某种决定。PHP是我选择的语言;我只是对它的设计很好奇。

一个猜测可能是JAVA依赖于某种“应用程序”服务器,而PHP不依赖于它——这意味着每次调用PHP页面时都必须创建一个新的环境

(当PHP被用作CGI而不是Apache模块或通过FastCGI使用时,尤其如此)


另一个想法可能是,C#和JAVA编译器可以在编译时进行一些重大优化——另一方面,由于每次调用页面时都会编译PHP脚本(至少,如果不使用操作码缓存进行“欺骗”),编译阶段必须非常快;这意味着不可能花太多时间进行优化


不过:PHP的每个版本通常都有一些性能改进;例如,当从PHP5.2切换到5.3时,您可以获得15%到25%的CPU

例如,看看这些基准:

  • --免责声明:它是用法语写的,是我做的

还有一点很重要,就是PHP很容易扩展:只需添加几个web服务器,瞧

从1台服务器到多台服务器时经常遇到的问题是会话——将会话存储在DB或memcached中(非常简单),问题就解决了



作为旁注:我不建议选择一种技术,因为在某些基准测试中,速度有两个百分点的差异:还有更重要的因素,比如你的团队对每种技术的了解程度,甚至是你将要使用的算法

我猜您对苹果和橙子的比较有点着迷——假设您使用所有这些语言来创建web应用程序,那么不仅仅是语言。(很多时候,是数据库拖了你的后腿;-)


我决不会建议根据速度参数选择这些语言中的一种而不是另一种。

根据,PHP使用了一种。

最大的单一原因是Java的HotSpot JVM和C的CLR都使用即时(JIT)编译。JIT编译将字节码编译为直接在处理器上运行的本机代码


此外,我认为Java字节码和CIL的级别低于PHP的内部字节码,这可能使许多JIT优化更容易、更有效。

取决于您想要做什么。在某些情况下,PHP肯定更快。PHP(相当)擅长于文件操作和其他基本功能(也包括XML功能)。Java或C#在这些情况下可能会慢一些(尽管我没有进行基准测试)

此外,需要将PHP输出(HTML或其他内容)下载到浏览器,这也会占用时间

此外,Java/C的速度在很大程度上取决于它所运行的机器(可能是多台)。Java/C在您的计算机上可能运行缓慢,而PHP只在一台服务器上运行,并且总是与服务器一样快(下载时间除外,等等)


我不认为它们在总体上具有可比性。我认为您需要完成一项任务,您可以使用这三种编程语言完成该任务,然后进行比较。这基本上是你在选择编程语言时应该做的事情;找到适合任务的。在任务适合编程语言之前,不要对其进行定型。

Java和C都有,它们采用字节码并编译成真正的机器代码。编译它的动作可能需要时间,因此C++和java可能会遇到较慢的启动时间,但是一旦代码被编译成JIT,它的性能就和任何像C++一样的“真正编译”的语言保持一致。

< P>一个原因是PHP中缺少JIT编译器,正如其他人提到的。
另一个重要原因是PHP的动态键入。动态类型的语言总是比静态类型的语言慢,因为变量类型是在运行时而不是编译时检查的。因此,像C#和Java这样的静态类型语言在运行时会大大加快速度,尽管它们通常必须提前编译。JIT编译器使动态类型语言的问题更少,但遗憾的是,PHP没有内置编译器。(编辑:PHP8将附带内置的JIT编译器。)

在一般情况下,解释语言不可能比编译语言甚至JIT语言更快


除非您的测试程序包含打印“Hello Worlds”,否则如果您关心速度,请坚持使用C#或Java。

+1速度在大多数情况下取决于代码编写得有多好,而不是在愚蠢的基准测试中测量的速度的相对差异。优秀的开发人员可以让这些平台飞起来。我不是在选择语言。PHP是我的首选语言(至少对于web而言)。我只是好奇。真正影响速度差异的不是语言,而是它们(编译的)代码的执行方式。正如其他人提到的,java和.NET虚拟机已经进行了很好的调优,这可能是因为php的执行方式没有得到优化。如果这是一个理论/语言限制,或者只是php人员需要做的工作,那么这就是pr