¿Por qué mis aplicaciones básicas de Heroku tardan dos segundos en cargarse?

100

Creé dos aplicaciones de Heroku muy simples para probar el servicio, pero a menudo toma varios segundos cargar la página cuando las visito por primera vez:

Todo lo que hice fue crear una aplicación Sinatra simple e implementarla. No he hecho nada para alterar o probar los servidores de Heroku. ¿Qué puedo hacer para mejorar el tiempo de respuesta? Es muy lento en este momento y no estoy seguro de por dónde empezar. El código de los proyectos está en github si eso ayuda.

Lance Pollard
fuente

Respuestas:

175
  • Si su aplicación no se utiliza durante un tiempo, se descarga (de la memoria del servidor).
  • En el primer golpe se carga y permanece cargado hasta que pasa un tiempo sin que nadie acceda a él.

Esto se hace para ahorrar recursos del servidor. Si nadie usa su aplicación, ¿por qué mantener los recursos ocupados y no dejar que alguien que realmente los necesite los use?
Si su aplicación tiene mucho tráfico continuo, nunca se descargará.

Hay una nota oficial sobre esto.

clyfe
fuente
51
La forma más fácil de solucionar este problema es aumentar sus dinamizadores a 2.
Capítulo
5
@diegopau Encontré una buena aplicación ( wekkars.com ) que hace exactamente lo que necesitas. Por el momento parece estar en beta pero funciona perfectamente aquí.
SteenhouwerD
68
Hacer ping a su servidor para evitar que esté inactivo es una mierda en su propio nido. Estos servicios de los que habla son gratuitos . Necesitan conservar recursos. Si todo el mundo hace ping a su servidor, ninguno se cambia y el proveedor tiene que escalar. Eso cuesta dinero ... adiós servicio gratuito. Creo que el cartel de esta respuesta debería eliminar la sugerencia de hacer ping al servidor.
GreenAsJade
32
Utilizo uptimerobot.com para hacer ping a mi aplicación Heroku cada 5 minutos de forma gratuita; me dice que tengo un 200OK (y lo que es más importante cuando no lo tengo) y mantiene la aplicación receptiva. No me disculpo por esto; Tengo 10 aplicaciones heroku, la mayoría de las cuales son aplicaciones de desarrollo o demostración, pero esta en particular es en vivo / producción y, a pesar del bajo tráfico, debe responder rápidamente cuando se le solicite. Si esto fuera una amenaza para el modelo de negocio de Heroku, nos impedirían hacerlo. Cuando tenga miles de usuarios globales, haré otro dinamómetro y comenzaré a pagar por lo que es un gran servicio. ¡Así que deja de pensar en el viaje de la culpa! :)
ED-209
3
Estoy con Tokn. ¿Cómo se supone que las nuevas aplicaciones atraigan a los usuarios si el sitio se carga tan lento que se van antes de que esté activo?
Deborah
14

También es posible que desee investigar las opciones de almacenamiento en caché que tiene en Heroku w / Varnish y Memcached. Estos se conservan independientemente de los dinámicos.

Por ejemplo, si tiene una página de inicio que no cambia, puede almacenarla en caché durante períodos prolongados en Varnish agregando encabezados de Cache-Control a la respuesta. Entonces, sus usuarios no experimentarán el impacto de la carga hasta que quieran "hacer algo" en lugar de cuando lleguen.

diecinueve
fuente
4

Debería consultar la respuesta de Tom Robinson a "Escalabilidad: ¿Cómo funciona Heroku?" en Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku divide los recursos del servidor entre muchos clientes / aplicaciones diferentes. A tu aplicación se le asignan bloques de potencia informática. Particiones de Heroku basadas en la demanda de recursos. Cuando tiene una aplicación popular que demanda más potencia, puede pagar por más 'dynos' (contenedores de aplicaciones) y luego obtener una porción más grande del pastel a cambio.

Sin embargo, en su caso, está ejecutando una aplicación gratuita que pocas personas, si es que hay alguna fuera de usted, visitan / usan. Por lo tanto, Heroku reduce los recursos que está obteniendo al descargar su aplicación, poniéndola esencialmente en hibernación, hasta que se realiza una solicitud a su dirección. Cuando eso sucede, y su aplicación ha estado inactiva durante mucho tiempo, se necesita tiempo para volver a cargar.

Agregue 1 dinamómetro adicional para evitar que su aplicación se quede dormida, si ese tiempo de recarga es importante.

RKelley
fuente
3

Estoy teniendo el mismo problema. Implementé una aplicación Rails 3 (1.9.2) anoche y es lento. Sé que 1.9.2 / Rails 3 está en BETA en Heroku, pero el ticket de soporte decía que debería estar bien usando algunas instrucciones que me enviaron.

Entiendo que la primera solicitud después de mucho tiempo lleva más tiempo. Tiene sentido. Pero simplemente cargar páginas que ni siquiera se conectan a una base de datos en 10 segundos a veces es bastante malo.

De todos modos, es posible que desee probar lo que voy a hacer. Ese es el perfil de mi aplicación y ver cuánto tiempo tarda localmente. Si está tardando 400 ms, entonces algo anda mal. Pero si obtengo 50 ms localmente y todavía me toma 10 segundos en Heroku, entonces definitivamente algo está mal.

Obviamente, el almacenamiento en caché ayuda, pero solo obtiene 5 MB gratis y, una vez más, con UNA persona usando el sitio, no debería ser tan lento.

cbmeeks
fuente