`
cxh116
  • 浏览: 76377 次
  • 性别: 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

相关推荐

    weixin_rails_middleware, 微信集成 ruby weixin_rails_middleware for integration weixin..zip

    `weixin_rails_middleware` 是基于 Ruby 的 Rack 技术构建的,它能够插入到 Rails 应用的请求处理流程中。当收到微信服务器发来的请求时,中间件会自动处理这些请求,如验证签名、解析XML数据,并提供相应的响应。 ...

    rails-beginner-s-guide

    Rails中的Middleware(中间件)机制是构建在Rack之上的。Rack为Ruby Web应用提供了一个简单的接口,允许应用处理HTTP请求和响应。Rails中间件负责应用中各个层次的请求处理逻辑。书中介绍了如何查看和定制中间件,...

    Ruby-RailsFootnotes在每一个Rails页脚展示应用程序的相关信息方便调试

    config.middleware.use Rails::Rack::Debugger config.middleware.use RailsFootnotes ``` 4. 重启Rails服务器以使更改生效。 5. 访问任何Rails应用页面,你将在页脚看到Footnotes链接,点击它们即可查看相关...

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

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

    Ruby on Rails中Rack中间件的基础学习教程

    ### Ruby on Rails中Rack中间件的基础学习教程 #### 一、Rack简介 Rack是一种轻量级的Web服务器接口规范,它定义了Web服务器和Web应用之间的接口,使得不同的Web应用能够运行在同一服务器上。Rack的重要性在于它...

    Rails API文档

    Rails API文档是Ruby on Rails框架的核心参考资料,它详尽地阐述了Rails框架的各种组件、方法、类库和功能。Rails是一个流行的开源Web应用程序框架,基于模型-视图-控制器(MVC)架构模式,用于构建数据驱动的Web...

    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

    rails_api_with_controller

    config.middleware.insert_before 0, Rack::Cors do allow do origins '*' resource '*', headers: :any, methods: [:get, :post, :options] end end ``` **9. 版本控制** 为了保持API的稳定性,通常会对其进行...

    Ruby-ApartmentRack和Rails应用的数据库多租户

    Apartment是Ruby社区中广泛使用的库,它为Rack(包括Rails)应用提供了简单的多租户支持。 Apartment gem允许你在单个数据库中为每个租户创建独立的数据空间,从而避免了维护多个独立数据库的复杂性和成本。这种...

    Rack::UTF8Sanitizer.zip

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

    rails2.3.2 ExceptionNotifier 配置

    config.middleware.use ExceptionNotifier::Rack ``` 这将插入一个中间件,当有未处理的异常发生时,该中间件会触发邮件通知。 此外,如果你的应用使用的是Rails 2.x版本,可能需要处理ActionMailer的配置,确保它...

    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::...

    用于检查应用程序健康状况的简单Rack中间件 -Ruby-Shell-下载

    标题中的“用于检查应用程序健康状况的简单Rack中间件”是指一种基于Ruby的Web服务器接口——Rack。Rack是一个规范,它定义了Ruby web应用和web服务器之间的接口,允许不同的框架和服务器之间进行交互。这个中间件是...

    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' ...

    RailsAPI

    RailsAPI的目标是减少不必要的依赖,使你的API应用程序更加精简,性能更优。 在Ruby on Rails框架中,创建API通常涉及到以下关键知识点: 1. **资源(Resources)**:Rails中的资源是基于RESTful原则进行组织的,...

Global site tag (gtag.js) - Google Analytics