2010-12-21 15 views
9

En primer lugar, estoy usando Django. Django proporciona el middleware gzip que funciona bien. Nginx también proporciona un módulo gzip. ¿Tendría más sentido usar el módulo gzip de Nginx porque está implementado solo en C, o hay otras consideraciones de rendimiento que me faltan?gzip - preguntas sobre el rendimiento

En segundo lugar, Django no almacena nada por debajo de 200 bytes. ¿Esto es porque gzipping es demasiado caro para tener algún valor cuando se comprime una salida más pequeña que eso?

En tercer lugar, la API que estoy creando será casi puramente dinámica con muy poco almacenamiento en caché. ¿Es el gzip lo suficientemente caro para que no sea práctico usarlo en esta situación (frente a una situación en la que podría almacenar en caché la salida comprimida en el servidor web)?

Respuesta

8

1) Imagino que una compresión gzip es suficiente y nginx es más rápido, aunque todavía no lo he comparado. GzipMiddleware utiliza algunos complementos, que también podrían estar bien optimizados.

# From http://www.xhaus.com/alan/python/httpcomp.html#gzip 
# Used with permission. 
def compress_string(s): 
    import cStringIO, gzip 
    zbuf = cStringIO.StringIO() 
    zfile = gzip.GzipFile(mode='wb', compresslevel=6, fileobj=zbuf) 
    zfile.write(s) 
    zfile.close() 
    return zbuf.getvalue() 

2) Pequeños archivos Gzip simplemente no pueden hacer uso de la compresión (de hecho archivos pequeños podrían ser más grande, cuando se procesa), por lo que se puede ahorrar tiempo simplemente saltarse este paso.

3) Puede diseñar un conjunto de pruebas que incluya datos de muestra. Luego decida sobre esos datos, lo que funciona mejor para su aplicación.