7

我建立数据库驱动的网站。以前我在 MySQL 中使用过 Perl 或 PHP。

现在我正在开始一个新的大型项目,我希望以一种能够产生最具响应性的站点的方式来完成它。

我在这里看到了几个页面,其中关于如何优化 PHP 的问题受到各种版本的批评,“不值得花大力气优化 PHP,因为它是一种解释性语言,不会产生太大的影响”。

我还听过关于编译语言与解释语言的好处的各种讨论(特别是在 SO 播客上) ,似乎使用编译语言而不是解释语言来服务站点符合我的兴趣。

这在网络环境中甚至可能吗?如果是这样,什么是合理的语言选择?

除了速度之外,我预见到的另一个好处是可以在编译时发现错误,而不必调试网站。这是合理的预期吗?

4

7 回答 7

7

您可以做的是多个流量大的网站(如 Facebook 或 Twitter)所做的,也就是在 C 插件中编写您的“CPU 消耗”算法。

例如,如果你打算使用 PHP,你可以编写一个PHP 扩展,或者如果你打算使用 Ruby / Ruby on Rails 等,你可以编写一个Ruby 扩展。

这样,您可以保持精简代码简单且易于维护(处理来自 C 的请求可能比处理来自 PHP 的请求更难),同时拥有强大而可靠的背景核心(因为它已编译,编译器会告诉您什么)问题在编译时)

于 2009-10-07T17:35:46.093 回答
4

如果您要构建一种新语言……并且您提出了所有语义并且它是完整的,并且您有一些魔术盒可以在编译语言和解释语言之间切换,编译版本会更快比解释版本。

为什么?因为编译将您的语义降低到机器上的较低级别,这意味着它可以更快地执行,而解释意味着当用户实际使用您的站点时,您的语言的语义将由某些东西(即解释器)翻译。

话虽如此……这并不一定意味着您的网站在编译语言上的运行速度比在解释语言上的运行速度要快 100%。如今,对于各种语言(即 PHP),有非常快的解释器,甚至还有用于解释语言的优化器,使它们甚至更快。

您的网站性能还有许多其他因素与您选择的语言无关。硬件设置、数据库设置、网络拓扑等。这些东西会对你产生更大的影响。我建议测量一下。

对我来说,在编译时发现错误可以节省大量时间,所以我更喜欢强类型的编译语言。它让我可以更快地完成工作,但这并不是客观上的最佳选择。有些人编写弱类型代码并在其上运行测试套件以验证其功能没有问题,我认为这也可以。

于 2009-10-07T17:33:38.607 回答
0

恕我直言,使用编译语言编写复杂的 Web 应用程序是毫无意义的,因为它对许多可管理性问题没有好处。

有很多方法可以提高脚本语言的性能和可伸缩性,无论是在语言级别还是在系统级别,因为编译语言最终可以获得完全有影响力的次要性能增益。

另一方面,我发现遵循敏捷开发和错误搜寻模式非常有用,只需更改代码并查看结果即可。

于 2009-10-07T17:32:32.913 回答
0

Perl 不是解释型语言:它被编译为字节码,因此只有在 perl 可执行文件启动时,您才需要为解释付出代价。所以当它与 Apache 一起使用时,不要使用 CGI,而是使用 mod_perl。

无论您做什么,如果您选择的语言不适合 Web 编程或没有好的库来支持您需要做的事情,那么开发时间可能会大大超过响应时间。例如,我永远不会选择 C ​​或 C++。您不想要一个速度极快但有缺陷且延迟 6 个月的 Web 应用程序。

于 2009-10-07T17:34:12.880 回答
0

Tomcat是使用编译语言部署网页的常用方法,但在你走得太远之前,请认真考虑一下你的速度瓶颈会是什么。Web 应用程序速度变慢的主要原因有几个:

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

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

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

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

人们可能会问“为什么要优化 php?” 因为无论如何,2和3通常更重要。通常,一个好的数据库缓存框架将是一个更好(也更容易)的优化。

于 2009-10-07T17:47:12.777 回答
0

Web 应用程序有很多部分。应用层所花费的时间不需要很大。对于一个典型的应用程序,最大的问题是网络服务器和数据库。用二进制 cgi 替换 PHP 不会改变这一点。

此外,虽然 PHP 的解释部分可能有点慢,但这只是 PHP 脚本执行过程中的一小部分。作为语言的一部分提供的所有功能都以本机代码实现。例如,当你调用一个类似的函数时preg_match,它会调用一个本地代码库并让它完成它的工作。这意味着实际的解释比你想象的要少。

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

于 2009-10-07T17:47:15.803 回答
0

到目前为止,网络的延迟是这个论点中最大的决定因素。事实上,网络延迟是一个非常重要的因素,它使语言考虑因素在性能问题上变得相当不重要。所以……用你所知道的。使用您最熟悉和最有效率的语言,并且可以在您进行过程中解决其他注意事项。现在,就是说,尝试新事物总是很有趣,学习新事物可能会成为一种痴迷,所以如果这个项目是一个让你有机会进行实验的个人项目,那么,无论如何......

于 2010-04-02T21:20:10.983 回答