1

我有一个用 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)

你有什么建议我怎么能做到这一点?

4

1 回答 1

1

如果您尝试通过 HTTP 请求生成缓存,则必须确保您没有在原始请求的上下文中发出该请求。这意味着该页面将请求自己。

如果您这样做并且只有一个线程或服务器运行您的应用程序,它将永远无法完成请求并且会超时。这是因为动作在完成该部分之前不会完成response = http.request(request)。但是,您的服务器将无法响应,因为它正在执行操作。

然而,这一切都是说,在任何情况下,你都不应该一个需要这么长时间才能加载的请求。任何花费超过一秒(或者,在生产中,比如 200 毫秒)的东西都应该被移动到一个 Delayed::Job 工作者或类似的后台队列中。

在不了解您的应用程序的详细信息的情况下,我强烈建议您想出一种方法来更快地生成页面,而不是在这里依赖缓存。

于 2013-04-23T08:43:42.370 回答