一个bsic web服务器如python SimpleHTTPServer或THTTPD以最less的进程读取静态文件; 因此速度相当快。 通常情况下,添加更多的function来创build一个先进的Web服务器(但仍然是轻量级的,如nginx )将放慢这个过程。
先进的networking服务器可以发挥一个窍门,使这个过程更快? 或者比最简单的简单是不可能的,而最简单的方法是读取静态文件的最快方法? 我的意思是可以nginx (或其他轻量级networking服务器声称是快)比THTTPD (或其他基本的Web服务器与最小的进程)?
那么CGI脚本怎么样呢,因为HTTPD和python CGIHTTPServer可以简单地执行cgi脚本。
具有较lessfunction的Web服务器具有较小的内存和CPU占用空间,这使得它们可以更快地执行特定的任务。 其中一些也是专门为一项任务而devise的。
这就是为什么像PHP-FPM这样的软件出现了。 而不是有一个臃肿的apache2进程,为每一个进程加载一个PHP模块,而是为静态文件(如nginx)和后端(如通过FastCGI的PHP-FPM)使用dynamic应用程序的前端。
但它取决于你的使用和环境。 如果你正在做99%的dynamic处理,那么它可能是不值得的麻烦。 一个很好的例子可能是一个Java应用程序。当你只使用tomcat而没有别的东西的时候,做所有的设置前端和后端的工作都没什么意义。
“简单”和“快速”并不总是相关的,特别是在计算中 – 在这种情况下,SimpleHTTPServer使用简单的文件读取方法,简单的networking方法,清晰明了的处理方式,方便新程序员阅读等。 nginx有很多复杂的代码,以最高效的方式利用先进的高速文件和networkingAPI,使用内存分配的奇怪技巧来避免复制数据等等。
另外,语言开销 – 当你的瓶颈是数据库或文件系统的时候,python是非常快的,但是实际上我发现为了每秒服务几千个缩略图,nginx和它所有的复杂东西都比一个简单的python程序快了10倍只是从内存返回数据。
至于THTTPD vs nginx,它们都是C,都是为了简单而devise的,所以我猜测它们在性能上会更接近一些 – 但是thttpd似乎是在2003年最后更新的,这意味着它在前期大多数nginx使用的高速API。
一般来说,简单意味着更快。 但是,除非您自己尝试,否则您不能确定服务器x比服务器y更快。 你也可以看看已经完成的基准(如果有的话)有一个想法。
先进的Web服务器可能比简单/基本的服务器慢,因为增加了复杂性。 但是,高级服务器在其他情况下可能会更好。 高级服务器通常允许您打开/closures某些function,并对其进行优化以获得更好的性能。 所以,没有一般的答案!