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