这是我一直想知道的事情:如果 PHP 全部 3 种语言都编译为字节码然后从那里执行,为什么 PHP 比 Java 或 C# 慢?我知道通常 PHP 会根据每个请求重新编译每个文件,但即使将 APC(字节码缓存)引入其中,其性能也远不及 Java 或 C#(尽管 APC 大大提高了它)。

编辑:我什至没有在网络层面上谈论这些语言。我说的是他们在进行数字运算时的比较。甚至不包括启动时间或类似的时间。

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

有帮助吗?

解决方案

其中一个原因是PHP中缺少JIT编译器,正如其他人所提到的那样。

另一个重要原因是PHP的动态类型。动态类型语言总是比静态类型语言慢,因为在运行时而不是编译时检查变量类型。因此,像C#和Java这样的静态类型语言在运行时会明显更快,尽管它们通常必须提前编译。 JIT编译器对于动态类型语言来说这不是一个问题,但唉,PHP没有内置的(尽管参见Facebook的 HHVM) 以获取PHP的第三方JIT示例。

其他提示

我猜你在这里比较了苹果和橘子 - 假设你使用所有这些语言来创建Web应用程序,它还有很多不仅仅是语言。 (很多时候,数据库正在减慢你的速度; - )

我绝不会建议在 speed 参数的基础上选择其中一种语言。

Java和C#都有 JIT编译器,它们采用字节码并编译进入真正的机器代码。编译它的行为可能需要一些时间,因此C#和Java可能会受到较慢的启动时间的影响,但是一旦代码被JIT编译,其性能就与任何“真正编译”的程序完全相同。像C ++这样的语言。

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

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

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

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


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


仍然 :PHP 的每个版本通常都会对性能进行一些改进;例如,从 PHP 5.2 切换到 5.3 时,您可以获得 15% 到 25% 的 CPU 利用率。

例如,看一下这些基准:


还有一件重要的事情是 PHP 非常容易扩展:只需添加几个网络服务器,瞧!

从一台服务器转移到多台服务器时,您经常遇到的问题是会话 - 将会话存储在数据库或内存缓存中 (好简单), ,问题解决了!


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

在琐碎的条件下,解释语言无法比编译语言甚至JIT语言更快。

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

取决于你想做什么。在某些情况下,PHP肯定更快。 PHP(非常)擅长文件操作和其他基本的东西(也是XML的东西)。在这些情况下,Java或C#可能会更慢(尽管我没有基准测试)。

此外,PHP输出(HTML或其他)需要下载到浏览器,这也耗费时间。

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

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

根据维基百科,PHP使用 Zend引擎没有 JIT

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top