Why are my basic Heroku apps taking two seconds to load?

我创建了两个非常简单的 Heroku 应用程序来测试这项服务,但当我第一次访问它们时,加载页面通常需要几秒钟:

我所做的就是创建一个简单的 Sinatra 应用程序并部署它。我没有对 Heroku 的服务器进行任何破坏或测试。我可以做些什么来改善响应时间?现在进度很慢,我不知道从哪里开始。如果有帮助的话,项目的代码在 github 上。

69994 次浏览
  • 如果应用程序未使用一段时间,它将被卸载(从服务器内存中卸载)。
  • On the first hit it gets loaded and stays loaded until some time passes without anyone accessing it.

这样做是为了节省服务器资源。如果没有人使用你的应用程序,为什么要让资源保持忙碌,而不让真正需要它们的人使用它们呢?
如果你的应用程序有很多连续的流量,它将永远不会被卸载。

关于这个有一个 官方文件

您可能还想研究 Heroku w/Varnish 和 Memcached 上的缓存选项。它们是独立于动力装置而持久化的。

For example, if you have an unchanging homepage, you can cache that for extended periods in Varnish by adding Cache-Control headers to the response. Then your users won't experience the load hit until they want to "do something" rather than when they arrive.

I am having the same problem. I deployed a Rails 3 (1.9.2) app last night and it's slow. I know that 1.9.2/Rails 3 is in BETA on Heroku but the support ticket said it should be fine using some instructions they sent me.

我明白第一个请求在很长时间后需要花费最长的时间。有道理。但是有时仅仅加载连接数据库都不需要10秒钟的页面是非常糟糕的。

不管怎样,你可能想试试我要做的事。这是我的应用程序配置文件,看看需要多长时间本地。如果是400毫秒,那就有问题了。但是如果我在本地得到50毫秒,在 Heroku 上仍然需要10秒,那么肯定有什么地方出了问题。

Obviously, caching helps but you only get 5MB for free and once again, with ONE person using the site, it shouldn't be that slow.

您应该在 Quora: http://www.quora.com/Scalability/How-does-Heroku-work上查看 Tom Robinson 对“可伸缩性: Heroku 如何工作?”的回答

Heroku 在许多不同的客户/应用程序之间划分服务器资源。你的应用程序被分配了计算能力块。基于资源需求的 Heroku 分区。当您有一个需要更多功能的流行应用程序时,您可以为更多的“动态”(应用程序容器)付费,然后获得更大的一块蛋糕作为回报。

不过,在您的情况下,您运行的是一个免费应用程序,很少有人(如果有外部人员)访问/使用它。因此,Heroku 通过卸载应用程序(实际上是让它处于休眠状态)来减少获得的资源,直到有人向您的地址发出请求。当这种情况发生时,你的应用程序已经空闲了很长时间,需要时间来重新加载。

如果重新加载时间很重要的话,添加1个额外的动态来防止你的应用睡着。

我通过 Heroku 的免费账户,发布的每个应用程序都有同样的问题。现在有了添加 dynos 的选项,这样你的应用在暂时不用的时候就不会被卸载,你也可以尝试使用 redis 或 memcached 进行缓存。但是我在我的小规模项目中使用了一个粗糙的解决方案,我基本上构建了一个 web scraper,把它放在一个带有睡眠的无限循环中,并且 tada 网站实际上有更好的响应时间(我猜它不会因为脚本而被卸载)。