哪种编程语言适合Web关键应用程序开发?

5
根据这个页面显示,Perl、PHP和Python比C/C++/Java慢50倍。
因此,我认为Perl、PHP和Python不能很好地处理关键应用程序(如超过1亿用户,每秒超过xx百万请求)。但也有例外,例如Facebook(据说Facebook完全使用PHP编写)和Wikipedia。此外,我听说Google广泛使用Python。
那么为什么会这样呢?是更快的硬件填补了C/C++/Java和Perl/PHP/Python之间的速度差距吗?
谢谢。

3
步骤1:确定你关心的案例。 步骤2:设计系统来收集这些案例在不同语言中的数字。 步骤3:比较、选择一种语言并实施。 - Noon Silk
3
常说优秀的程序员可以用糟糕的语言编写出优秀的程序,而糟糕的程序员则用优秀的语言编写出糟糕的程序。因此更重要的是你如何编写代码,选择语言只是次要的。 ;) - Lukman
2
如果您需要选择一种快速的语言来实现已知算法,则 shootout 基准测试是有意义的。如果您需要选择一种用于编写业务应用程序的语言,则基准测试毫无意义。问题不在于“哪种语言可以更快地执行 X”,因为对于“您的业务”,没有简单的 X。性能和健壮性主要取决于您的程序员的水平,而不是语言。 - Schwern
1
根据这个页面http://shootout.alioth.debian.org/u64q/php.php#about 的说法,"PHP 很少成为瓶颈" ;-) - igouy
1
根据这个页面http://shootout.alioth.debian.org/flawed-benchmarks.php的说法,“CPU时间很少是限制因素”;-) - igouy
显示剩余2条评论
9个回答

7

在大多数高负载的Web应用程序中,计算代码是我最不关心的。

典型的高可用性Web应用程序的瓶颈(不一定按顺序,但最有可能的是):

  1. 数据库(I/O和CPU)
  2. 文件I/O
  3. 网络带宽
  4. 应用服务器上的内存
  5. 您的Java / C++ / PHP / Python代码

使您的应用程序可扩展的主要问题是:

  1. 减少对数据库的访问(缓存,考虑集群,智能查询)
  2. 分发应用程序(集群)
  3. 消除线程之间无用的同步锁(请参见commons-pool 1.3)
  4. 创建正确的DB索引,数据模型和复制以支持多个用户
  5. 使用增量更新(AJAX)减小响应大小

只有在实现了以上所有内容后,再优化您的代码。

如果我漏掉了什么,请随时添加到列表中。


5
你所链接的页面只讲了一半的真相。当然,本地语言比动态语言更快,但这对于具有高计算要求的应用程序至关重要。对于大多数Web应用程序来说,这并不是那么重要。Web请求通常很快得到响应。更重要的是拥有一个高效的框架,能够适当地管理资源并启动新线程以快速响应请求。此外,时间行为并不是唯一关键的方面。使用动态语言可能更容易实现可靠和无错误的应用程序。

而且,更快的硬件也不是解决方案。事实上,谷歌以使用廉价机群而著名。


更快的硬件是一种解决方案;谷歌决定采用具有广泛耐热性的通用硬件,因为这样更具成本效益。 - Rob Grant
更快的硬件是让一个适当设计的应用程序运行更快并能够为更多用户提供服务的解决方案。它不是让一个设计不良的应用程序工作得更好的解决方案。 - kgiannakakis
1
kgiannakakis和Robert Grant因此,Google是一个设计不良的应用程序。 - Pete Kirkham
对于大多数Web应用程序而言,这并不是很重要——因为解释性语言仅用于将原生语言编写的应用程序组合在一起。 - igouy
更快的硬件经常被用来加速设计不良的应用程序。硬件需要花费金钱,更快的硬件花费更多,但成本正在降低。设计需要花费金钱,适当的设计花费更多,而成本并没有降低。 - David Thornley

3

(例如拥有1亿用户,每秒超过xx百万的请求)

要实现这种性能水平,你必须将网站/应用程序设计和实现为可扩展的多层系统,并在(可能)所有层次上进行复制。此时,一个编程语言比另一个更快/更慢的事实可能只影响您需要在处理器农场中使用的机器数量。系统架构的设计则更加重要。


2

PHP没有JIT编译器,无法将代码编译成机器码。

另一个重要原因是PHP的动态类型。动态类型语言始终比静态类型语言慢。

点击下面链接了解更多信息。

为什么PHP比Java或C#更慢?


5
当进行负评价时,请添加一条评论,解释为什么会给出负评价,这样回答的用户就有机会自我纠正并在未来改进。 - Eran Medan
问题不在于为什么一种语言比另一种语言慢,而在于哪种语言更适合Web开发,因此回答了错误的问题。此外,提问者混淆了原始性能是否会使语言更好,而这个答案只会加剧这种混淆。 - Schwern
我只是推荐了一篇文章,可能有助于更好地理解为什么PHP比其他语言慢。 - Hiyasat

1

C语言是目前最快的语言。它如此之快,以至于我们用它来编写其他语言。但是,几乎没有人会认真地用C语言编写网站。为什么呢?因为在C语言中很容易出现难以检测的错误,而且它几乎没有任何帮助你的功能。简而言之,它会让程序员陷入困境并产生错误。

构建一个强大、快速的应用程序不是选择最快的语言,而是A)可维护性和B)可扩展性。

可维护性意味着它没有太多的错误。这意味着您可以快速添加新功能和修改现有功能。您需要一种尽可能多地为您完成工作并不会妨碍您的语言。这就是Perl、Python、PHP和Ruby如此受欢迎的原因。它们都是为了程序员的方便而编写的,而不是为了原始性能或整洁度。C语言是为了原始性能而编写的。Java是为了概念上的整洁而编写的。

可伸缩性意味着你可以从10个用户扩展到10,000个用户,而无需重写整个系统。以前这意味着你要编写最紧凑的代码,但高度优化的代码通常很难维护。它通常是为了计算机的利益而做的,而不是为了人类和业务的利益。这就牺牲了可维护性,你得告诉老板加一个新功能需要花3个月的时间。
现如今,可伸缩性主要通过增加硬件和并行化来实现。你可以将工作分配给多少进程、处理器和机器?如果你能做到这一点,只需启动另一台廉价的云计算机即可满足需求。当然,你可能还想进行一些优化,但在这种规模下,实施更好的算法比优化代码能够获得更多的收益。
例如,我曾经处理过一个运行缓慢的 PHP 应用程序,一次只能处理 50 个用户,然后从带有 mod_php 的 Apache 切换到 lighttpd 并使用负载均衡、远程 FastCGI 进程进行并行化,只需最少的代码更改。一些基本的分析揭示了他们用于原型设计的 PHP 框架非常缓慢,因此将其剥离。分析还建议添加一些索引以使数据库查询运行更快。最终结果是一个可以处理数千个用户的系统,并且可以根据需要添加更多容量,同时保留大部分实现业务逻辑的代码不变。这花费了几周时间,而我并不真正了解 PHP。
重新实现小而精的部分可能会对速度很有帮助,但通常已经有优化库或工具为您完成了。例如,您的 Web 服务器。对于复杂性和不断变化的业务逻辑,重要的是易于维护和您的程序员的技能水平。
你会发现大部分网站都是用PHP、Perl和Python编写的,因为它们易于编写,并且其中一些小而精细的部分是用C、Java或类似Scala(例如Twitter)的外来语言编写的。例如Wikia是一个修改过的Mediawiki,用PHP编写,但通过进行大量缓存等操作,它能够高效运行。

“它非常快,我们可以在其中编写其他语言” - 这更多地与期望无论存在什么硬件,都有一些C编译器支持该硬件有关。 - igouy

0

我同意luc的观点。架构才是真正重要的,编程语言并不是。


0

谷歌正在使用Python进行GAE开发,Windows Azure提供PHP。LAMP架构非常适合应用程序的可伸缩性。

我认为编程语言在性能方面并不是那么重要。最重要的是要看你的应用程序架构。

希望有所帮助。


0
为了提供网页服务,您需要:
  1. 接收并解析请求。
  2. 决定您希望如何处理请求。
  3. 读/写持久数据(数据库、缓存、文件系统)
  4. 输出HTML数据。
服务器端语言的“速度”仅适用于步骤二和四。鉴于大多数脚本都努力使步骤2尽可能短,并且大多数Web语言(包括PHP)尽可能优化步骤4,在任何严肃的网站中,大部分请求处理时间将花费在步骤3上。
而且,步骤3所花费的时间与您使用的服务器端语言无关...除非您实现自己的数据库和分布式缓存。

0

对于 PHP,有很多可以提高性能的方法。例如:

  • Php 加速器
  • 缓存查询
  • 优化查询
  • 使用分析工具找到较慢的部分并进行优化

这些方法肯定会有助于缩小与低级语言之间的差距。因此,回答你的问题,代码内部还有其他优化方法可以使其运行更快。


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