2008-12-07 13 views
17

¿Hay alguna manera de ser seguro que una página proviene de la memoria caché en un servidor de producción y en el servidor de desarrollo también?Cómo probar el almacenamiento en caché de django?

La solución no debe incluir involucrar almacenamiento en caché de middleware porque no todos los proyectos lo utilizan. Aunque la solución en sí podría ser ser un middleware.

Simplemente comprobando si los datos son obsoletos no es un método de prueba muy seguro IMO.

Respuesta

19

Hacemos un montón de componentes de almacenamiento en caché y no todos se actualizan al mismo tiempo. Así que establecemos los valores de host y timestamp en un procesador de contexto universalmente incluido. En la parte superior de cada fragmento de plantilla nos ceñimos en:

<!-- component_name {{host}} {{timestamp}} --> 

El component_name sólo hace que sea fácil de hacer una vista del origen y la búsqueda de esa cadena.

Todos nuestros puntos de vista que son páginas objeto-detalle definir una variable de contexto "page_object" y tenemos esta en la parte superior de la plantilla maestra base.html:

<!-- {{page_object.class_id}} @ {{timestamp}} --> 

id_clase() es un método de una superclase utilizada por todas nuestras clases de contenido principal. Es simplemente:

def class_id(self): 
    "%s.%s.%s" % (self.__class__._meta.app_label, 
        self.__class__.__name__, self.id) 

Si se carga una página y cualquiera de las marcas de tiempo son más que unos pocos segundos de edad, es una apuesta bastante buena que el componente se almacena en caché.

+0

Solución elegante. Se puede automatizar también Gracias. – muhuk

+0

Solo por conveniencia, ¿tiene los procesadores de contexto que mencionó en algún lugar en djangosnippets.org u otro sitio? – Matthew

+3

¡Agregar un procesador de contexto es fácil! 1. Crea un archivo, p. my_context.py. 2. Cree una función que tome un objeto de solicitud, p. mi_contexto (solicitud). 3. Devuelve un mensaje de cosas divertidas disponible para todas las plantillas. 4. Agregue "my_context.my_context" a TEMPLATE_CONTEXT_PROCESSORS en settings.py. 5. ¡Ganar! –

7

Burlarse de la vista, pulsar la página y ver si se invocó el simulacro. si no fuera así, se usó el caché en su lugar.

3

La razón por la que utiliza cachés es para mejorar el rendimiento. Pruebe el rendimiento ejecutando una prueba de carga contra su servidor. Si el rendimiento del servidor coincide con sus necesidades, ¡ya está listo!

14

La sugerencia de Peter Rowells funciona bien, pero no necesita un procesador de contexto de plantilla personalizado para las indicaciones de fecha y hora. Simplemente puede usar la etiqueta de la plantilla:

<!-- {% now "jS F Y H:i" %} --> 
+0

FWIW esto rompió el estilo de mi sitio en IE8 muy mal cuando lo agregué como la primera línea de mi plantilla. Parece estar bien cuando está dentro de las etiquetas html. Y lo puse en etiquetas de comentarios html. Tomó mucho tiempo descubrir que esa era la causa de mis problemas de CSS. –

+0

Lamento escuchar eso, me temo, me olvidé de las etiquetas de comentarios. Arreglé mi entrada de solución en consecuencia. – Johannes

+0

solo necesita estar dentro de la declaración . Solo pensé en publicar para futuras personas que lean este hilo. pero gracias, es una solución simple y efectiva –

Cuestiones relacionadas