`
woody_420420
  • 浏览: 42056 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rack Middleware Profile

阅读更多

  Rack是一个高效,简洁的框架(Webserver Interface)。其设计架构十分简单,如下图所示:
 

  (图片来源:http://amberbit.com/blog/2009/04/04/introduction-to-rack-middleware/

  图中的每个Module都可以说是一个Middleware。并且这个类似stack的结构可以“堆积”更多的Middleware。railscasts曾发过一个ResponseTimer Middleware,用来查看一个Rack请求的响应时间。最近利用ResponseTimer的原理,写了一个MiddlewareProfile Middleware,用来查看每一个Middleware在一次Request-Response周期中所占用的时间。这样,当往Rack中添加更多其他的Middleware时,可以利用MiddlewarePorfile来查看是否存在瓶颈。
  (源代码见附件)
  使用:
  以Rack自带的Lobster为基础:

  1. 简单应用

app = Rack::Builder.new {
  use MiddlewareProfile
  use Rack::CommonLogger
  use Rack::ShowExceptions
  map "/" do
    use Rack::Deflater
    use Rack::Lint
    run Rack::Lobster.new
  end
}

  将 use MiddlewareProfile放在第一行,是为了显示Rack堆栈中的所有Middleware分别占用时间。控制台输出:

"Rack::Lobster -- 1.002389"
"Rack::Lint -- 0.00181100000000001"
"Rack::Deflater -- 0.000687000000000104"
"Rack::URLMap -- 0.000146999999999897"
"Rack::ShowExceptions -- 7.00000000000145e-05"
"Rack::CommonLogger -- 7.2000000000072e-05"

  2. 可以改变use的位置来跳过某些Middleware的Profile:
 

app = Rack::Builder.new {
  use Rack::CommonLogger
  use MiddlewareProfile
  use Rack::ShowExceptions
  map "/" do
    use Rack::Deflater
    use Rack::Lint
    run Rack::Lobster.new
  end
}

  这样,不会对CommonLogger进行Profile。

  3. 使用:only, :except, :threshold参数

use MiddlewareProfile, :only => [Rack::Deflater, Rack::Lint]

  只显示:only中指定Middleware的耗时信息

use MiddlewareProfile, :except => [Rack::CommonLogger, Rack::ShowExceptions]

  不显示:except中指定的Middleware的耗时信息

use MiddlewareProfile, :threshold => 0.001

  只显示耗时大于:threshold的Middleware

 

  当然,这个Middleware只是从很高的层面来分析Rack中的各个Middleware占用的时间,如果要更详细的分析,还需要使用其他的库(ruby-prof...等)。

分享到:
评论

相关推荐

    rack-ssl-enforcer:一个简单的Rack中间件,用于执行ssl连接

    为了使Rack :: SslEnforcer正常工作,它必须位于Rack Middleware的顶部。 使用enable :session会将Rack :: Session :: Cookie放在Rack :: Ssl :: Enforcer之前,并防止Rack :: Ssl :: Enforcer将cookie标记为安全

    rack-jsonp-middleware:一个 Rack JSONP 中间件

    机架-jsonp-中间件 将所有 .jsonp 请求转换为 jsonp 响应的机架中间件。 概述 ... $ gem install rack-jsonp-middleware 配置 导轨 3 在您的config/application.rb文件中添加: require 'rack

    rack-reverse-proxy, rack的反向代理.zip

    《深入理解Rack反向代理:基于rack-reverse-proxy库》 在Web开发领域,Rack框架是Ruby社区中一个非常重要的组件,它提供了一种标准化的方式来构建Web服务器和应用程序之间的接口。而rack-reverse-proxy则是Rack生态...

    rack-0.87.zip

    标题 "rack-0.87.zip" 暗示我们正在处理一个名为 "Rack" 的开源项目,其版本为0.87。Rack在IT行业中是一个重要的组件,尤其在Ruby on Rails社区中,它作为Web服务器和Rails应用之间的接口。这个压缩包可能包含了Rack...

    IBM NetBAY Rack PDU 介绍

    IBM NetBAY Rack PDU是IBM提供的一种数据中心基础设施解决方案,主要功能是管理和分配机架内的电力供应。这种PDU(Power Distribution Unit)分为三种类型,每种都有其特定的应用场景和设计特点,以确保服务器和其他...

    RACK01 网络互联设备

    RACK01 网络互联设备

    rack接收机和多用户检测

    RACK(Receiver for Asynchronous CDMA with Knwon Interference,异步CDMA已知干扰接收机)是一种针对码分多址(CDMA)通信系统的特殊接收机设计,它主要应用于多用户环境,以解决多用户干扰(Multi-User ...

    rack-attack, 用于阻塞&节流的rack 中间件.zip

    rack-attack, 用于阻塞&节流的rack 中间件 :: 攻击 !rack 中间件,用于阻塞&节流滥用请求。Rack::Attack 是一个 rack 中间件,用来保护你的网络应用程序不受坏客户端的影响。 它允许基于请求的任意属性的...

    Rack::UTF8Sanitizer.zip

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

    工业 PC SIMATIC Rack PC IL 43[手册].pdf

    本手册详细介绍了SIMATIC Rack PC IL 43工业PC的相关操作与安装指南,适用于2005年9月以后交付的SIMATIC Rack PC IL 43系列产品。手册内容包括了设备的简介、描述、应用规划、安装指南、连接步骤、调试方法以及设备...

    rack教程(ruby)

    ### Rack教程(Ruby) #### 1. 什么是Rack? Rack是Ruby世界中的一个轻量级、灵活的Web服务器接口规范,它定义了一个统一的标准,使得Ruby Web应用能够与不同的Web服务器无缝集成。Rack简化了Ruby Web应用的部署...

    rack-recaptcha, 通过Recaptcha验证验证验证的rack 中间件.zip

    rack-recaptcha, 通过Recaptcha验证验证验证的rack 中间件 机架 recaptcha 在web应用程序中删除这个 rack 中间件,通过Recaptcha启用验证验证。:如何使用配置首先,安装库: [sudo] gem 安装机架 recaptcha你必须在...

    rack-1.5.2.gem

    rack-1.5.2.gem,难得资源,注意收起

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

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

    三旺 RACK2000说明书(2U,19英寸机架).pdf

    根据提供的文件信息,RACK2000机架是深圳市三旺通信技术有限公司设计开发的一款电信级产品,它具有以下详细知识点: 1. 产品定位:RACK2000机架专为电信工程设计,是一个高集成度的19英寸标准2U机架。 2. 设计功能...

    基于Rack的网络伺服器Serve.zip

    Serve 是一个小型的基于Rack的网络伺服器,它能简化从任何文件目录伺服HTML,ERB,Haml以及大量模板语言的工作。 Serve的目标是成为Rails MVC中View的一个轻量化...Serve是使用Rack和Tilt开发的。 标签:Serve

    艾肯声卡Umix1010Rack_v1.37.10_driver_win10.zip

    《艾肯声卡Umix1010Rack_v1.37.10_driver_win10.zip:专业音频编码解码技术解析》 在数字音频领域,声卡扮演着至关重要的角色,它连接着音乐制作人与电脑,提供高质量的声音输入输出。本文将深入探讨艾肯(IK ...

    rack 接 收 技 术

    主要介绍rake 接 收 技 术 移动通信

    【Muck Rack】2024年年度新闻研究报告.pdf

    【Muck Rack】2024年年度新闻研究报告.pdf【Muck Rack】2024年年度新闻研究报告.pdf【Muck Rack】2024年年度新闻研究报告.pdf【Muck Rack】2024年年度新闻研究报告.pdf【Muck Rack】2024年年度新闻研究报告.pdf...

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

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

Global site tag (gtag.js) - Google Analytics