Rails:页面加载时间非常长

3

我有一个Rails项目。 在一个控制器中出现了非常奇怪的情况:浏览器需要大约3分钟才能加载页面,但是Rails在日志中写道:

Completed 200 OK in 20563ms (Views: 17144.2ms | ActiveRecord: 324.4ms)

我知道21秒是很长的时间,但它不是3分钟。来自浏览器的数据

我知道这份数据不足够,但我不需要一个完整的答案,只需要指出问题所在。该页面的大小约为5 MB。


你是否使用CDN来提供页面上的资源?你在本地也看到这种行为吗,还是只在生产环境中出现?你的大多数图像来自其他网站还是存储在你的资源管道中? - ruby_newbie
请在Chrome开发者控制台的“网络”选项卡中截取屏幕截图,以便我们可以准确地查看哪个请求花费了多长时间。 - Nick M
还要确保你没有执行 n+1 类型的查询。当你在模板视图中调用关联时,这是一个容易犯的错误。 - Jeff
3个回答

3
延迟可能是由于在config/environments/development.rb中设置config.assets.debug = true引起的。将其设置为false可能会解决您的问题。
这样做会将源文件合并在一起,源映射将无法工作(例如,如果使用Sass/Coffee,则无法在开发工具中看到它)。

1

如您所见,大部分时间都花费在“空闲”阶段。这包括加载页面上所有资源(图像、样式表、JavaScript等)的时间。因此,您的HTML页面需要10秒钟才能加载和呈现,但其余的时间用于下载页面上的所有资源。

这可能是由于某些托管在服务器上的单个资源响应速度非常缓慢。因此,即使您已经加载了所有内容,但如果您有一个Google托管的jquery文件,而且网络连接非常差,那么您会看到“空闲”占用了很多时间。

但是,在您的情况下,看起来是页面上的一些图像导致页面大小达到了5MB。


1
谢谢你的回答,但5Mb只是Rails服务器上的数据(非常大的表)。我注意到:在Rails写完日志信息之后,在浏览器接收数据之前,Ruby进程占用了50%的处理器。我认为这可能是中间件方面的问题。 - kunashir
你可能有一颗双核处理器,而Ruby正在占用你100%的CPU时间。这可能是一些中间件在处理你的响应,但你可以通过流式传输页面来优化页面渲染,即在生成页面时立即将其发送给客户端,而不是等待所有内容都渲染完毕后再发送。 - Uzbekjon

0
经过长时间的搜索,我发现了一个问题。这是一个不必要的数据库查询,它为主对象加载了许多相关对象。但我不明白为什么需要这么长时间(也许是垃圾回收清理它的混乱)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接