是什么让Espresso如此之快?

时间:2013-05-23 17:47:06

标签: ruby sinatra

我一直在各种Ruby框架上运行一些性能测试,结果发现Espresso比任何一个都要快得多。我有一个用Sinatra编写的大型代码库,并且很想加速应用程序,并且想知道是否有可能以某种方式提取Espresso的底层引擎并将其插入Sinatra。有谁想过这个?我知道它们都是基于Rack的,所以真正解释性能差异的原因是什么?

2 个答案:

答案 0 :(得分:3)

快速浏览一下Espresso,我会说它更快,因为它简单而不是任何可重复使用的深层“引擎”。

在Sinatra或Rails下运行的Web服务在处理和准备请求数据时使用稍微抽象,导致更多的方法调用,与更简单的Espresso框架相比,这增加了开销。

从Sinatra到Espresso的转换将转换为使用Espresso的DSL,它比Sinatra的基于块的路由更直接地公开方法。您不能轻易地将Sinatra路线连接到Espresso,如果您设法这样做也不会导致速度提升。那是因为你仍然会使用Sintatra的路线处理,这是速度差异的主要原因。

实际上,如果您尝试使用低于10毫秒的响应时间创建性能非常高的服务,则速度差异只是一个问题。这需要对系统的其他部分进行高度优化,而不仅仅是请求处理框架,在大多数应用程序中,实际上只占服务器总响应时间的一小部分。

答案 1 :(得分:1)

尼尔的答案非常全面。

我只能补充说,Espresso在设计时会在加载时完成大部分路由工作。

在运行时,它将请求直接传递给匹配的操作,这是一个Ruby方法。

此外,Espresso使用自己的URL映射器,该映射器在特定需求下进行了优化。

不确定在Sinatra内使用Espresso的引擎。

可以更容易找到将Sinatra的DSL转换为Ruby方法的“简单”方法......