欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Rack Middleware, Rails Metal, Rails Controller简单性能比较

程序员文章站 2022-07-03 13:24:04
...
1 rack middleware中间件:

文件位于app/racks/irack.rb
class Irack
  def initialize(app)
    @app = app
  end
  def call(env)
    request = Rack::Request.new env
    if request.path_info == '/i/kitty'
      [200, {}, ['i kitty']]
    else
      @app.call(env)
    end
  end
end

修改config.ru,在run Blog::Application上面添加下面代码
require ::File.expand_path('../app/racks/irack.rb',  __FILE__)
use Irack


2 rails3 metal :
文件位于app/controllers/hi_controller.rb
class HiController <  ActionController::Metal
  def kitty
    self.response_body = ['hi kitty']
  end
end

路由配置, 修改config/routes.rb,添加下面代码
  get "hi/kitty"


3 rails controller :
在终端输入:
引用
rails g controller hello kitty

在kitty方法代码
    render :text => "hello kitty", :layout => nil


测试,ab一千个请求
引用

ab -n 1000 http://localhost:3000/i/kitty
ab -n 1000 http://localhost:3000/hi/kitty
ab -n 1000 http://localhost:3000/hello/kitty


测试结果:
方式 一千请求总时间 平均一个请求的时间(ms)
rack 2.225 seconds 2.225
rails3 metal 8.875 seconds 8.875
rails3 controller 19.048 seconds 19.048


从测试结果来说,rack中间件性能无疑是最好的,但难维护.
metal相对controller来说,在追求性能的时候,是一个不错的选择
相关标签: rack rails metal