Rack Middleware, Rails Metal, Rails Controller简单性能比较
程序员文章站
2022-07-03 13:24:04
...
1 rack middleware中间件:
文件位于app/racks/irack.rb
修改config.ru,在run Blog::Application上面添加下面代码
2 rails3 metal :
文件位于app/controllers/hi_controller.rb
路由配置, 修改config/routes.rb,添加下面代码
3 rails controller :
在终端输入:
在kitty方法代码
测试,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
测试结果:
从测试结果来说,rack中间件性能无疑是最好的,但难维护.
metal相对controller来说,在追求性能的时候,是一个不错的选择
文件位于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来说,在追求性能的时候,是一个不错的选择