感谢 Godfrey Chan 到目前为止我从他那里得到的有益见解。他指出,与日志中报告的时间相比,有一个 Rack 中间件可以在响应中的 X-Runtime HTTP 标头中为我提供有关整个 Rails 请求的更准确时间(完成时间为 XXXms... )。
这是我从测试中得到的:
1 - 在 Chrome 中访问 Rails 操作的直接 URL:
- X-运行时间:25ms
- Chrome“等待”时间:27ms
- Rails 日志格式报告时间:7ms 内完成 200 OK(查看:0.9ms | Sequel:3.0ms)
2 - 访问相同的 URL,但使用带有 proxy_pass 的 nginx,也在 Chrome 中:
- X 运行时间:84 毫秒
- Chrome“等待”时间:88ms
- 在 7 毫秒内完成 200 次 OK(观看次数:0.8 毫秒 | 续集:2.9 毫秒)
3 - 从 Chrome 的开发者工具中复制 Curl 地址并使用 curl -I 运行它:
- X-Runtime:105ms(有时会达到 400ms)
- 在 88 毫秒内完成 200 次 OK(观看次数:2.0 毫秒 | 续集:5.5 毫秒)
当我多次尝试时,这些时间几乎是一致的。
如果通过 nginx proxy_pass,为什么 Rails 需要更长的时间来处理相同的请求?我知道 Curl 不能利用 keep-alive 等功能,但我相信 nginx 能够利用它。但无论如何,X-Runtime 标头不应该考虑打开连接的时间,对吧?