【问题标题】:What's the extra time for when loading web page in rails?在rails中加载网页时的额外时间是多少?
【发布时间】:2011-09-27 07:12:05
【问题描述】:

我得到了一个在几毫秒内生成的页面。

在 83 毫秒内完成 200 次 OK(查看次数:75.9 毫秒)

当我尝试使用“time wget http://localhost:3000/search”加载此页面时,我犯规了它需要 1.5 秒。

真实0m1.562s 用户 0m0.001s 系统 0m0.003s

其中没有 js 执行时间,因为它没有加载到浏览器中。 那么额外的时间用来做什么?是否有任何工具可以计算出 Rails 中的时间成本细节? 谢谢。

【问题讨论】:

    标签: ruby-on-rails performance ruby-on-rails-3


    【解决方案1】:

    如果 Rails 在开发中加载,控制器不会被缓存(默认情况下),这会增加延迟并且可能不会被 Rails 的测量捕获(不能说我看过)。

    要查看的另一件事是正在使用的机架服务器。 WEBrick 像冠军一样工作,但速度很慢; Thin 和 Unicorn 在服务请求方面明显更快。如果您需要优化操作以提高速度,我会考虑使用 Rack 中间件或 Rails Metal。

    在 TCP 级别,localhost->127.0.0.1 DNS 查找将花费一些时间。此外,wget 必须为应用程序建立一个新的套接字。应用程序本身无法测量这些。

    对于在 Unicorn 4.0.1 上运行的 Rails 2.3.12 应用程序点击登录页面的相同实验:

    在 16 毫秒内完成 (DB: 4) | 302 找到 [http://localhost/]

    real        0m0.407s
    user        0m0.000s
    sys         0m0.010s
    

    2011 年 9 月 28 日更新:

    深入 HTTP 层,curl 支持使用时间戳输出跟踪 URL 请求:

    curl --trace-ascii trace.log --trace-time http://localhost:3000

    要进一步挖掘并查看实际调用,请尝试使用 strace 并开启计时模式:

    strace -T curl http://localhost:3000

    这两个示例的输出都可以作为 gist 获得。

    【讨论】:

    • 感谢您的回答。您还有其他想法(源代码除外)如何查看rails以获取加载/计时详细信息吗?顺便说一句,我不认为“TCP 级别”可以解决这个问题。我使用“wget”来获取动态页面(php),但只花费了大约 10 毫秒。
    • 我添加了更多选项来跟踪时间,这可能有助于比较。
    • 从本地跟踪日志中,我可以看到发送请求和接收响应标头之间的时间超过 1 秒。但是rails log告诉我它只使用了80ms。根必须在 rails 中。还在找。
    • 可能会在 rails 堆栈上尝试 strace。它可能很大,但值得一试。
    • 我不确定您所说的“rails stack”是什么意思。我是 Rails 新手,我找不到深入研究 Rails 的方法,我的意思是,Rails 的执行细节。你能详细介绍一下吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多