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