2009-10-07 72 views
7

我构建数据库驱动的网站。以前我使用过Perl或PHP和MySQL。网站解释与编译语言(PHP,ASP,Perl,Python等)

现在我开始一个大的新项目,我想这样做会导致响应最快的站点

我在这里看到了几个页面,其中关于如何优化PHP的问题被各种版本的“不值得花费很多时间来优化PHP,因为它是一种解释型语言,它不会产生太大的差异”。

我也听到各种讨论(在SO播客especiallon)约编译主场迎战的好处解释型语言,它好像它会在我的利益使用编译语言服务做网站而不是解释性语言。

这是甚至可能在Web上下文?如果是这样,那么合理的语言选择是什么?

除了速度上的一个好处,我预见到的可能性是在编译时找到错误,而不必调试网站。这是否合理?

回答

7

你可以做什么是多个大流量的网站(如Facebook或Twitter),也就是在C-plugin中编写你的“CPU消耗”算法。

例如,你可以写一个PHP extension如果你打算使用PHP,或Ruby extension如果您打算使用Ruby/Ruby on Rails的,等等

这样一来,你可以保持您的流线型代码简单,易于维护(处理来自C而不是PHP的请求可能会更困难),同时拥有强大而坚实的后台核心(因为它已经编译,并且编译器告诉你编译时问题是什么)

+2

如果您想进一步优化 – Jacco 2009-10-07 17:57:36

+0

“(因为它已编译,并且编译器会告诉您编译时问题是什么),您甚至可以编写Apache模块”LOL。除非你在谈论Ada,否则大多数其他语言没有特别严格的编译器。而且,C甚至没有异常处理。至少大多数脚本语言将保护您免受未定义的行为。 – weberc2 2013-01-08 16:19:41

0

恕我直言,这是一个相当无感用汇编语言编写一个复杂的Web应用程序,因为它给好处不针对大量的管理问题。

有很多办法站起来表演和可扩展性的脚本语言,无论是在语言层面和制度层面,是次演出获得最终可用的编译语言完全有影响。

在另一边,我觉得是可以跟踪的敏捷开发和bug狩猎模式,简单地改变你的代码,看到的结果是非常有用的。

4

如果你要建立一个新的语言...你想出了所有的语义,它是完整的,和你有一些神奇的盒子,有做解释的语言与汇编之间的切换,编译版本会比解释版本更快。

为什么?由于编译带给您语义下来,这意味着它可以更快地运行的机器上一个较低的水平,而解释意味着你的语言的语义将通过一些事情(即翻译),翻译时,用户实际使用您的网站。

说了这么多......这并不一定意味着你的网站将运行100%的编译语言快VS一种解释型语言。目前有各种语言(如PHP)在当今非常快速的解释器,甚至还有解释型语言的优化器,甚至可以使它们更快。

还有许多其他的东西进入你的网站是不可知您选择的语言的性能。硬件设置,数据库设置,网络拓扑等等。这些可以对您产生更大的影响。我会建议测量是肯定的。

对我来说,在编译时发现错误是一个巨大的节省时间,所以我倾向于选择强类型的编译语言。它可以让我的工作更快完成,但这并不能使客观上成为最佳选择。有些人在编写弱类型代码时没有问题,并且在它们上运行测试套件来验证它们的功能,我认为这些功能同样适用。

+0

Quibble:运行在解释型语言上的JIT仍然有可能在*特定的运行情况下进行一些优化*,编译器无法做出这些优化,因为它们不是普遍可靠的。我有时看到过一些Java的说法。因此成功地比编译语言更快。 – dmckee 2009-10-07 17:37:15

+0

@dmckee我会争辩说,如果我有一个编译的Java和一个JITed Java,我的编译Java总是会运行得更快。我还没有看到这可能是错误的情况。但是,我并没有声称JITed Java总是比编译的C#慢,对我来说这是比较苹果和桔子的情况。 – Joseph 2009-10-07 17:40:12

+1

考虑'for(...){... if(cond){...} else {...} ...}其中'cond'在本次运行中已知固定,但可以变为一般的循环。 JIT编译器可以放弃检查并缩短循环,而通用编译器则不能。我从来没有见过这个问题,但我听说它声称。 – dmckee 2009-10-07 17:45:09

0

Perl不是一种解释型语言:它被编译为字节码,因此只有在perl可执行文件启动时才支付解释费用。所以在Apache中使用它时,请不要使用CGI而是mod_perl。

不管你做什么,如果你选择一种不适合网络编程的语言,或者没有很好的库来支持你需要做的事,开发时间可能会大大超出响应时间。例如。我绝不会选择C或C++。你不想要一个速度很快,但是有bug的,并且延迟了6个月的网络应用程序。

+0

在虚拟机上运行仍然与硬件上运行的不完全相同。当然,它比连续解析程序文本要快,但仍然...它是纯粹解释和本地代码之间的中间情况。 – dmckee 2009-10-07 17:40:26

+0

与Perl一样,PHP也被编译为字节码。默认情况下它是在eack加载时完成的,但是你可以使用操作码缓存来解决这个问题。 – troelskn 2009-10-07 17:49:17

0

Tomcat是使用编译语言部署网页的常用方式,但是在你走得太远之前,请认真考虑你的速度瓶颈cks将是。有放缓的几个主要来源在Web应用程序:

  1. 网络延迟
  2. 静态的媒体,尤其是图像
  3. 数据库查询
  4. 服务器端处理代码
  5. 客户端处理代码

1和5与这个问题并没有多大关系。

如果您有许多图像因页面而异,则2将会相关。如果是这样的话,客户端浏览器不会做这么好的缓存,每次页面加载都需要一些时间。在这种情况下,很可能您的服务器端语言不会被注意到,因为静态媒体的开销将占主导地位。

对于很多应用程序,3可能是比4更大的因子。如果你的数据非常少,但是你做了大量的处理,那么4可能占主导地位,但否则,即使你使用的是解释型语言,3也会占主导地位。

人们可以问“为什么优化php?”因为无论如何2和3往往更重要。通常,好的database caching framework将会是更好(更容易)的优化。

0

有很多部件进入Web应用程序。应用程序层花费的时间不需要很大。对于一个典型的应用程序来说,最大的麻烦就是在网络服务器和数据库中。用二进制cgi替换PHP不会改变这一点。此外,尽管PHP的解释部分可能有点慢,但这只是PHP脚本执行过程中的一小部分。所有作为该语言一部分提供的功能均以本地代码实现。例如,当你调用像preg_match这样的函数时,它会调用一个本地代码库并让它工作。这意味着实际的解释比你想像的要少。

在某些情况下,使用与PHP不同的语言可能是值得的,但这些都是特殊情况。一般来说,这里没有什么可以获得的。

0

网络延迟是迄今为止最主要的决定因素。事实上,网络延迟是一个重要因素,它使得语言考虑因素在性能问题上变得不重要。所以......随你知道。使用您最舒适,最有成效的语言,并随着您的需要可以制定其他考虑事项。现在,这就是说,尝试新东西总是很有趣,而学习新东西可能会成为一种痴迷,所以如果该项目是一个私人的项目,让你有机会尝试,那么一定要尝试......

+0

感谢您的回答,但我不确定我是否同意。如果我一次有100个访问者使用我的服务器的CPU,那么如果执行速度很快,它可以产生很大的影响。我在几次听到PHP缓慢后问这个问题。根据我的经验,PHP的速度与数据库问题相比几乎没有影响,这也是事实 - 错误的MySQL设计可以真正放慢一切。 – 2010-04-07 10:21:08