我有一个巨大的页面,我正在使用rails caches_page命令进行缓存。 在生成缓存之前,第一个http请求大约需要30秒来生成缓存。我想避免这种情况,因此第一个访问页面的用户可以更快地加载它。
我正在尝试使用http以编程方式生成缓存,但这似乎不起作用:
uri = URI.parse("http://mydomain.com/huge_page")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
我得到的回应是超时错误:
Timeout::Error (execution expired)
你有什么建议我怎么做?
答案 0 :(得分:1)
如果您尝试通过HTTP请求生成缓存,则必须确保未在原始请求的上下文中生成该请求。这意味着页面将自己请求。
如果你这样做并且你只有一个线程或服务器运行你的应用程序,它将永远无法完成请求并将超时。这是因为在完成response = http.request(request)
部分之前,操作不会完成。但是,您的服务器将无法响应,因为它正处于操作过程中。
但是,所有这一切都是说在任何情况下你都应该从不有一个需要很长时间才能加载的请求。任何需要超过一秒钟(或者在生产中,如200毫秒)的东西都应该被移动到Delayed :: Job工作者或类似的后台队列中。
在不知道应用程序的详细信息的情况下,我强烈建议您提供一种更快速生成页面的方法,而不是依赖于此处的缓存。