我构建了数据库驱动的网站。以前我使用过Perl或PHP和MySQL。
现在我正在启动一个大型新项目,我希望这样做会产生响应最快的网站。
我在这里看到了几个页面,其中有关如何优化PHP的问题受到各种版本的批评,“因为它是一种解释性语言并不会产生那么大的差异,所以不值得花时间去优化PHP。” / p>
我还听过关于编译语言和解释语言的好处的各种讨论(特别是SO播客),似乎使用编译语言符合我的兴趣提供网站而不是解释语言。
这在网络环境中是否可行?如果是这样,那么合理的语言选择是什么?
除了速度加快一个好处之外,我认为在编译时发现错误的可能性,而不是必须调试网站。这是合情合理的吗?
答案 0 :(得分:7)
你可以做的是多个流量很大的网站(比如Facebook或Twitter),也就是在C插件中写下你的“CPU消耗”算法。
例如,如果您计划使用PHP,则可以编写PHP extension;如果计划使用Ruby / Ruby on Rails,则可以编写Ruby extension。
这样,您可以保持简化的代码简单易用(可能更难以处理来自C的请求而不是来自PHP),同时拥有强大而可靠的后台核心(因为它已编译,并且编译器)告诉你在编译时问题是什么)
答案 1 :(得分:4)
如果您打算构建一种新语言......并且您想出了所有语义并且它已经完成了,并且您有一些魔术盒可以在编译语言与解释之间进行切换,编译后的版本会比解释版更快。
为什么呢?因为编译会将您的语义降低到机器上的较低级别,这意味着它可以更快地执行,而解释意味着您的语言的语义将由某些翻译当用户实际使用您的网站时,(即解释器)。
话虽如此......这并不一定意味着您的网站在编译语言和解释语言上的运行速度要快100%。那里有各种语言(即PHP)非常快的解释器,甚至还有解释语言的优化器,使它们甚至更快。
您网站的性能还有很多其他因素与您选择的语言无关。硬件设置,数据库设置,网络拓扑等。这些事情会对您产生更大的影响。我建议测量一下。
对我来说,在编译时发现错误是一个巨大的节省时间,所以我倾向于选择强类型的编译语言。它让我可以更快地完成工作,但这并不能使客观上成为最佳选择。有些人编写弱类型代码并在其上运行测试套件以验证其功能是没有问题的,我认为这也可以正常工作。
答案 2 :(得分:0)
恕我直言,使用编译语言编写复杂的Web应用程序是没有道理的,因为它不会带来许多可管理性问题的好处。
有很多方法可以提高脚本语言的性能和可扩展性,无论是在语言层面还是在系统层面,最终可以通过编译语言获得的次要性能获得完全影响。
另一方面,我发现可以遵循敏捷开发和错误搜索模式非常有用,只需更改代码并查看结果即可。
答案 3 :(得分:0)
Perl不是解释语言:它被编译为字节码,因此只有在启动perl可执行文件时才需要支付解释费用。所以当与Apache一起使用时,不要使用CGI而是使用mod_perl。
无论你做什么,如果你选择一种不适合网络编程的语言或没有好的库来支持你需要做的事情,开发时间可能会大大超过响应时间。例如。我永远不会选择C或C ++。您不希望网络应用程序速度极快,但有问题且迟到6个月。
答案 4 :(得分:0)
Tomcat是使用编译语言部署网页的常用方法,但在您走得太远之前,请认真考虑您的速度瓶颈。 Web应用程序有一些主要的减速源:
1和5与这个问题没什么关系。
如果您有许多图像因页面而异,则2将是相关的。如果是这种情况,客户端浏览器将不会做这么好的缓存,并且每次页面加载都需要一些时间。在这种情况下,很可能不会注意到您的服务器端语言,因为静态媒体的开销将占主导地位。
对于许多应用来说,3可能比4更大。如果您的数据非常少,但是您进行了大量的处理,那么4可能占主导地位,但除非您使用的是解释性语言,否则3将占主导地位。
人们可以问“为什么优化php?”因为2和3通常更重要。通常,良好的database caching framework将是更好(更容易)的优化。
答案 5 :(得分:0)
Web应用程序中有很多部分。应用层所花费的时间不需要很大。对于典型的应用程序,最大的生猪将在Web服务器和数据库中。用二进制cgi替换PHP不会改变这一点。
此外,虽然PHP的解释部分可能有点慢,但这只是PHP脚本执行过程中的一小部分。作为语言一部分提供的所有函数都在本机代码中实现。例如,当您调用类似preg_match
的函数时,它将调出一个本机代码库并让它完成其工作。这意味着实际解释比您想象的要少。
在某些情况下,使用与PHP不同的语言可能是值得的,但这些是特殊情况。一般来说,这里没有任何好处。
答案 6 :(得分:0)
网络的延迟是这个论点中最大的决定因素。事实上,网络延迟是一个很重要的因素,它使语言因素在性能问题上变得不重要。所以......跟你所知道的去吧。使用您最舒适,最高效的语言,并随着时间的推移解决其他问题。现在,说,尝试新东西总是很有趣,学习新东西可以成为一种痴迷,所以如果项目是一个个人的,让你有机会进行实验,那么,无论如何......