perl是编写高性能页面的最快方法吗?

时间:2010-09-05 07:36:06

标签: performance perl webserver

我受到了Slashdot的启发,我听说它使用非常有限的服务器来支持很多响应速度快的用户。并且有一个名为slashcode的网站,不确定slashdot是否使用其源代码。

我想知道Perl是否是编写高性能网页的最佳选择?我知道使用Apache或IIS会有很多开销吗?

任何想法,书籍,论文,教程?

7 个答案:

答案 0 :(得分:14)

我将假设“高性能”是指实际生成页面的实时时间以及可同时提供的页数。

编程语言并不像您的服务器和算法那么重要。您可能希望研究The C10k Problem这是一系列新技术和技术改进,旨在允许单个Web服务器同时处理10,000多个并发连接。 Nginxlighttpd网络服务器和varnish缓存等内容来自此项目。

使用非常轻巧,非常快速,非常模块化的Web服务器(Apache和IIS不是它),在它前面有一个非常轻,非常快的缓存来避免必须两次处理相同的事情。对于高并发服务器,即使缓存几秒钟也可以为您节省数百或数千个进程。通过将静态页面切换为一系列AJAX请求,您可以独立于频繁更改的位来缓存更多的静态位和碎片。

不使用将程序嵌入到Web服务器中的mod_blah,而是使用FastCGI或类似方法将程序放入自己的小应用程序服务器中。这允许它们独立于Web服务器运行,可能在远程机器上运行并具有负载平衡。这使您可以轻松扩展处理能力。

最终,您将对应用程序代码的重要位置进行微优化,以达到语言重要的程度,但您可以专注于真正重要的位,而不是仅仅根据原始性能完成整个项目。

答案 1 :(得分:3)

无论代码有多快,在某些时候瓶颈都会停止成为您的代码,并开始成为Web服务器本身。

答案 2 :(得分:2)

只要您不使用CGI接口[1]与Web服务器通信,该语言就不会对99%的情况产生明显的影响。例外情况是那些你正在进行繁重的后端处理,而不是简单地从数据库中抓取一些东西,轻轻地按摩它,然后将它发送给用户 - 而且,如果你正在做那种事情,你就是'如果可能的话,最好不要异步进行,并将结果填充到数据库中,以便轻轻地按摩并稍后查看。

原因很简单,网络连接和数据传输时间将比程序的执行时间长得多,甚至都不好笑。如果建立与服务器的网络连接并在每个方向上进行数据传输需要2秒钟,那么没有人会关心服务器上的处理是否会在该网络活动的2个之上增加0.1秒或0.2秒。

[1]请注意,我在这里谈论vanilla CGI“启动一个新流程来服务每个传入请求”模型, Perl CGI模块(CGI.pm / { {1}})。 use CGI还有一些方法可以利用一个长期存在的过程来处理多个请求。

答案 3 :(得分:1)

架构和系统设计比高流量应用的语言选择更重要。

但选择一种语言不是你应该做的第一件事,除非你打算从头开始编写所有内容。

您应该选择一个工具集。

如果您想拥有最快的东西,请查看现有的Web应用程序。什么符合您的需求?它是如何定制的?它是否符合您的性能/可扩展性要求?如果是这样,您使用的语言将是您的应用使用的语言。

如果你在现有的应用程序中找不到好的匹配,请查看不同的框架,Catalyst,Rails,Squatting,Camping,Jifty,Django。有a nice list of them on Wikipedia

你应该能够找到一个可以完成这项工作的框架,其中很多都是如此。选择一些竞争者并选择一个。您使用的语言将是您的框架使用的语言。

答案 4 :(得分:1)

真的没有“高性能页面”这样的东西。这就像问最快的汽车是什么(如果你看够了 Top Gear ,你知道这不是一个简单的答案)。您必须考虑您实际想要做什么(即特定任务),您需要做些什么才能实现这一目标,以及哪些工具最适合您。

你是否会让很多人做很多小事,或者做很多事的人做的很少?这一切都会立即发生(即尖峰),还是会持续需求?您是发回小块数据还是提供非常大的文件?

假设每个部分都尽可能快。这肯定是一种幻想,但无论如何都要考虑它。现在一切都尽可能快,根据它们的相对快速对每个部分进行排名。什么是最慢的部分?是磁盘访问吗?网络IO?套接字可用性?

如果你还没有考虑到这一点,那么这种语言可能并不像你的技能那么重要。

有很多关于网络性能的书籍。 :)

答案 5 :(得分:0)

serverfault上的

This post表示您可以将扩展模块写入nginx以提供动态内容。

此类模块需要编译为本机机器代码,因此最有可能比运行Perl更快。

答案 6 :(得分:-1)

我不相信它会比PHP,Python,Ruby,Java或C#等其他常见选择更快。