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

Performance perl是编写高性能页面的最快方法吗?,performance,perl,webserver,Performance,Perl,Webserver,我受到Slashdot的启发,听说它使用非常有限的服务器来支持大量用户,并提供快速响应。还有一个名为slashcode的网站,不确定slashdot是否使用其源代码 我想知道Perl是否是编写高性能网页的最佳工具?我知道使用Apache或IIS会有很多开销 有什么想法、书籍、论文、教程吗?在serverfault上建议您可以编写一个扩展模块来提供动态内容 这些模块需要编译为本机代码,因此很可能比运行Perl更快。无论代码有多快,在某个时候瓶颈将不再是代码,而是开始成为web服务器本身。只要您不使

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

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

有什么想法、书籍、论文、教程吗?

在serverfault上建议您可以编写一个扩展模块来提供动态内容


这些模块需要编译为本机代码,因此很可能比运行Perl更快。

无论代码有多快,在某个时候瓶颈将不再是代码,而是开始成为web服务器本身。

只要您不使用CGI接口[1]与web服务器对话,在99%的情况下,这种语言不会对性能产生显著影响。例外情况是,您正在执行繁重的后端处理,而不是简单地从数据库中获取某些内容,轻轻地对其进行按摩,然后将其发送给用户—如果您正在执行此类操作,如果可能的话,最好是异步执行,并将结果填充到数据库中,以便在以后对其进行少量处理和查看

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


[1] 注意,我在这里谈论的是普通的CGI“启动一个新流程来服务每个传入请求”模型,而不是Perl CGI模块(
CGI.pm
/
使用CGI
)。有很多方法可以
使用CGI
,同时也可以利用一个在其生命周期内处理多个请求的长期流程。

对于高流量应用程序来说,架构和系统设计比语言选择更重要

但是选择一种语言并不是你应该做的第一件事,除非你打算从头开始写

您应该选择一个工具集

如果您想尽快获得一些东西,请查看现有的web应用程序。什么能满足你的需要?它的可定制性如何?它是否满足您的性能/可扩展性要求?如果是,您使用的语言将是您的应用程序使用的语言

如果你在现有的应用程序中找不到一个很好的匹配,那么看看不同的框架,Catalyst,Rails,Shutting,Camping,Jifty,Django。有一个


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

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

我将假设“高性能”指的是生成一个页面所需的实时时间以及它可以同时服务的数量

编程语言不如服务器和算法重要。您可能希望了解哪些是一系列新技术和技术改进,目的是允许单个web服务器并发处理10000多个并发连接。像web服务器和缓存之类的东西都来自这个项目

巨大的成功来自于使用一个非常轻、非常快、非常模块化的web服务器(Apache和IIS不是),它前面有一个非常轻、非常快的缓存,以避免必须处理同一件事情两次。对于高并发服务器,即使缓存几秒钟也可以节省数百或数千个进程。通过将静态页面分割成一系列AJAX请求,您可以缓存更多的静态位和片段,而不依赖于频繁更改的位

不要使用mod_blah将您的程序嵌入web服务器,而是使用FastCGI或类似工具将您的程序放入自己的小型应用程序服务器。这使得它们可以独立于web服务器运行,可能在远程机器上运行,并进行负载平衡。这使您可以轻松地扩展处理能力


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

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

你会让很多人做很多小事情,还是让更少的人做真正的大事?这一切是一次发生(即峰值),还是持续的需求?您是发回小块数据还是提供真正大的文件

假设每一部分都尽可能快。这确实是一个幻想,但无论如何都要考虑一下。既然一切都尽可能快了,就根据每个部件的相对速度对它们进行排序。最慢的部分是什么?是磁盘访问吗?网络IO?插座可用性

如果你还没有想到这一点,那么除了你的语言技能之外,语言可能没有那么重要


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

一个好的架构将比语言更重要。这包括缓存、数据库、文件存储等其他层。是的,slashcode是Slashdot背后的代码。它使用Apache+mod_perl。谢谢,但我不这么认为