2009-05-06 15 views
9

¿Cuáles serían algunas ventajas de usar etags/rancio?/Fresh_when? en lugar de caché de páginas (en un caché de archivos)?Rails - etags frente al almacenamiento en caché de páginas (caché de archivos)

Apache maneja automáticamente etags para archivos estáticos, pero incluso si no fuera así, el almacenamiento en caché de páginas aún sería mejor ya que la aplicación Rails ni siquiera se llama.

Entonces, ¿en qué casos usaría los métodos provistos por Rails (rancio?/Fresh_when?)?

+0

Creo que se refiere al almacenamiento en caché de la página. caches_page generará archivos estáticos para que el servidor web los sirva directamente. caches_action almacenará en caché todo el contenido de la página, pero seguirá pasando por el controlador para que se puedan ejecutar los filtros, etc. – kch

+0

Así es, gracias por la información. – Ivan

Respuesta

5

Son realmente complementarios. Etags/fresh_when, etc. te ayudan a jugar bien con cachés posteriores (como tus propias instancias de Barniz/Calamar o Rack :: Caché o la memoria caché del navegador o servidores proxy ISP ...)

El almacenamiento en caché de páginas te evita golpear la pila de los rieles por completo Apache/su servidor web sirven el archivo, por lo que no se realizan búsquedas en bases de datos. Pero debe lidiar con la caducidad de la caché para mantener la caché actualizada.

Usando etags/GET condicional, no guarda mucho tiempo de procesamiento debido a que aún necesita para obtener todos los registros utilizados en la página:

def show 
    @article = Article.find(params[:id]) 
    @feature = Feature.current 
    fresh_when :etag => [@article, @feature] 
end 

en el caso de que el usuario tiene una página actual , le ahorra tiempo de renderizado y el ancho de banda requerido para enviar la página.

+0

Dos correcciones: 1) Varnish de Mainline no admite ETags, pero hay una rama experimental 'experimental-ims' en el repositorio de origen en el que se implementa. 2) Puede guardar un tiempo de procesamiento significativo con ETags almacenando el valor de ETag para una página dada por separado de los datos utilizados para calcular su valor (de esta manera no tiene que volver a generarlo, que puede ser más costoso debido a las búsquedas de bases de datos) . Consulte "Libro de cocina de servicios web RESTful", sección 10.1. – benvolioT

0

Una cosa que viene a la mente es que fresh_when aún le ahorrará algo de renderizado, incluso si borró todo el caché de la página. Aquí estarías usando ambos en tándem.

Tengo curiosidad por otras respuestas también.

2

Otro uso que se me ocurrió fue que aún se podía procesar cierta información antes de permitir que Rails entregara el encabezado "304 no modificado". Me gusta si quieres grabar hits en una página.

Cuestiones relacionadas