`
cxh116
  • 浏览: 75083 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

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

阅读更多
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)
rack2.225 seconds2.225
rails3 metal8.875 seconds8.875
rails3 controller19.048 seconds19.048


从测试结果来说,rack中间件性能无疑是最好的,但难维护.
metal相对controller来说,在追求性能的时候,是一个不错的选择
0
2
分享到:
评论
1 楼 cxh116 2011-08-29  
另外还有种方式,就是经过路由的rack

经过路由的rack写法
   match 'foo',  :to => lambda{|env| [200, {}, ['k']]}
主要是调用call方法
     match 'foo',  :to => FooRack.new

class FooRack
  def call(env)
    [200, {}, ['Foo rack', Time.now.to_s]]
  end
end


  结果是平均一个请求的时间是5.3ms

相关推荐

    rails-auth:RailsRack的基于资源的模块化身份验证和授权

    Rails :: Auth是一个灵活的库,旨在使用Rack Middleware进行身份验证(AuthN)和授权(AuthZ)。 它将,使用AuthN中间件首先验证凭据(例如X.509证书或cookie),然后通过使用这些凭据(例如(ACL))的单独AuthZ...

    akita-rails-har-logger:秋田的Rails中间件

    这提供了Rack中间件和Rails ActionController过滤器,用于将HTTP请求-响应对记录到HAR文件中。 安装 将此行添加到您的应用程序的Gemfile中: gem 'akita-har_logger' 然后执行: $ bundle install 或将其自己安装...

    rack-bearer_auth:在机架应用程序中使用RFC 6750承载身份验证的中间件

    机架:: BearerAuth Rack :: BearerAuth是在Rack应用中使用承载身份验证的中间件。... use Rack :: BearerAuth :: Middleware do match path : "/foo" do | token | # validate token # AccessToken.where

    Rack::UTF8Sanitizer.zip

    Rack::UTF8Sanitizer 是一个 Rack 中间件用来清理 URI 和 HTTP 请求头部中包含的无效 UTF-8 字符。Rails 的使用方法:config.middleware.insert 0, Rack::UTF8SanitizerRack 的使用方法:use Rack::UTF8Sanitizer

    ionic-rails-app:与Rails通信的示例Ionic应用程序

    离子+滑轨 这是一段代码,伴随着有关如何使Rails和Ionic完美配合播放的屏幕录像。 入门 创建一个文件夹来容纳应用程序的两面 ...config.middleware.insert_before 0, "Rack::Cors" do allow do origins '*' reso

    Rails认证系统OmniAuth.zip

    Rails.application.config.middleware.use OmniAuth::Builder do provider :developer unless Rails.env.production? provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET'] end 标签:安全相关...

    ROR绿色最新环境(2013/3/10)

    Rails::Rack::Logger ActionDispatch::ShowExceptions ActionDispatch::DebugExceptions ActionDispatch::RemoteIp ActionDispatch::Reloader ActionDispatch::Callbacks ActiveRecord::ConnectionAdapters::...

    prerender_rails_embedded

    预渲染 Rails 嵌入式 一个 rails gem 使用中间件来渲染 JavaScript Web 应用程序,无需安装其他服务即可动态调用 phantomjs。 概述 使用Prerender Rails Embedded可以避免在 rails 环境中安装新的 node.js 服务器,...

    rack-host-redirect:机架中间件以重定向旧域

    一种精简而简单的Rack中间件,它可以将请求从一台主机重定向到另一台主机。 这对于难以或无法通过Nginx / Apache配置(例如Heroku)实现的环境很有用。 我正在使用它来将流量从* .herokuapp.com子域重定向到自定义...

    rails_warden:在Warden上的瘦导轨插件,用于身份验证

    该应用程序在基本的 Rack层的顶部添加了一些不错的帮助程序。 它的目的是使Warden更易于在基于Rails的环境中使用,而无需像设计中那样繁重。 安装 将此行添加到您的应用程序的Gemfile中: gem 'rails_warden' ...

    scrolls-rails

    滚动导轨 用法 在config/production.rb : Scrolls::Rails.setup(Rails.application) config.middleware.delete Rails::Rack::Logger config.middleware.use Scrolls::Rails::Rack::QuietLogger

    rack-utf8_sanitizer:架子

    安装将此行添加到您的应用程序的Gemfile中: gem 'rack-utf8_sanitizer'然后执行: $ bundle或将其自己安装为: $ gem install rack-utf8_sanitizer对于Rails,将其添加到您的application.rb : config . middleware...

    rack-csrf-detector:自动化CSRF检测中间件

    机架式CSRF检测器仅当您使用GET和POST Rails才能保护您免受CSRF的侵害。 该中间件可帮助您确定GET请求何时导致应用程序状态更改。这个怎么运作rack-csrf-detector猴子修补ActiveRecord来标识导致数据库commit GET...

    rack-adequate-json:过滤给定属性名称的 JSON 响应以减少有效负载大小

    机架足够的 Json 机架中间件以减少 json 有效负载的大小 - 允许使用 json api 的客户端选择有效... Rails :: Application # Middleware options # root: the root key for the json payload , default: nil # target

    rack-livereload:https

    机架:: LiveReload 不推荐使用此fork:改为查看 。 嘿,您的有了! 不再需要浏览器扩展! 只需将其插入您的中间件堆栈中就... # Add Rack::LiveReload to the bottom of the middleware stack with the default opti

    rack-no_animations:机架无动画

    安装将此行添加到应用程序的Gemfile中: gem 'rack-no_animations' 然后执行: $ bundle或将其自己安装为: $ gem install rack-no_animations用法在config/environments/test.rb将中间件添加到rails中,例如: ...

    rack-reducer:在任何Rack应用程序中,通过任何ORM,通过URL参数声明式过滤数据

    安装将rack-reducer添加到您的Gemfile中: gem 'rack-reducer' , require : 'rack/reducer' Rack :: Reducer除了Rack本身之外没有其他依赖项。利用如果您的应用需要呈现数据库记录列表,则可能希望这些记录可通过URL...

    rack-weixin:机架中间件

    微信公众平台开放消息接口机架中间件 使用“ weixin /中间件”验证微信请求 解析推消息与“ weixin / model...use Weixin :: Middleware , 'your api token' , '/your_app_root' configure do set :wx_id , 'your_wei

    机架防御:用于限制和过滤请求的机架中间件

    Rack :: Defense是Rack中间件,可以轻松地向基于Rack的应用程序(Ruby On Rails,Sintratra等)添加请求速率限制和请求过滤。 使用提供的时间段,请求条件和最大请求​​数,请求(也称为速率限制)在滑动窗口上...

    rack-objectspace:每次请求后转储ruby对象空间

    入门安装gem之后,将rack-objectspace插入到中间件堆栈中: config.middleware.insert_after ActionDispatch::Static, Rack::Objectspace, store: Moneta.new(:Redis)我建议在堆栈中安装尽可能低的机架对象空间。...

Global site tag (gtag.js) - Google Analytics