2010-03-01 22 views
10

Estoy usando el Django manage.py runserver para desarrollar mi aplicación (obviamente), pero toma 10 segundos para cargar completamente una página porque el servidor de desarrollo es muy, muy lento en servir medios estáticos.Haciendo que el servidor de desarrollo Django sea más rápido en servidores estáticos

¿Hay alguna forma de acelerarlo o algún tipo de solución? Estoy usando Windows 7.

+3

¿Cómo puede su página ser tan grande? ¿Qué tamaño de archivo estás presentando? ¿Dónde se guardan sus medios estáticos? Estás ejecutando en una computadora a través de 'http: //127.0.0.1: 8000', ¿verdad? Si es así, debería correr increíblemente rápido. ¿Estás sirviendo contenido estático a través de las funciones de visualización de Django? Si es así, eso es un error. –

+0

El peso total de una página es de alrededor de 53 kilobytes, no más, pero eso incluye muchas hojas de estilo, imágenes y archivos de JavaScript. Estoy usando la vista de medios estática incluida con Django para el desarrollo. – Veeti

Respuesta

7

Considere utilizar mod_wsgi en su lugar, y tener httpd manejar los medios estáticos.

+2

+1: No lo acelere. Considere arreglar su entorno de desarrollo para usar un servidor adecuado. O bien, considere averiguar por qué sus medios estáticos son tan lentos. –

+0

¿Cómo configuro mod_wsgi de forma que funcione como el servidor de desarrollo, volviendo a cargar los cambios automáticamente? Una búsqueda rápida en Google devolvió algo que parecía ser una solución que no funcionaba en Windows. – Veeti

+0

Hay una entrada en el wiki allí específicamente sobre la recarga, con una sección que trata sobre los problemas de Win32. –

5

El servidor de desarrollo es una aplicación de subproceso simple insegura, por lo que no se puede hacer mucho.

Un truco que podría intentar es redirigir/site_media al segundo servidor de desarrollo, pero esto es feo y probablemente no sirva de mucho. Por lo tanto, podría intentar agrupar/comprimir múltiples activos en un css/js (por ejemplo, usando YUI Compressor).

Y en cualquier caso, debe tener un servidor de medios estático separado, que pueda servir a varios activos a la vez.

3

Instale Firefox (si no lo ha hecho) e instale el Firebug Add-On. Reinicia tu navegador. En la esquina inferior derecha, haga clic en el icono "error" y asegúrese de que en la pestaña "Red" (es un menú desplegable) del panel Firebug que se abre en la parte inferior del navegador, el monitor de red está activo.

Ahora, con la pestaña de red de Firebug abierta, abra la página generada por Django que observó cargar lentamente. Echa un vistazo a las barras de la línea de tiempo. Notará que los fragmentos coloreados de cada barra indican el motivo del tiempo total de "carga" de la solicitud. Violet, por ejemplo, significa que en realidad el navegador está esperando que el servidor genere la respuesta. Gray significa que está recibiendo contenido. Y así. Al pasar el mouse sobre las barras se mostrará una leyenda de color.

Con el monitor de red de Firebug, debe ser capaz de determinar exactamente cómo su navegador y/o servidor están pasando sus 10 segundos.

+2

La descarga real de un activo no lleva tiempo, pero el servidor de desarrollo aparentemente solo puede manejar una solicitud a la vez , causando la lentitud (?). – Veeti

+0

"una solicitud a la vez", es porque tiene un solo subproceso, por lo que todas las solicitudes se serializan en la cola. –

2

Ejecute lighttpd para mostrar el contenido estático y use MEDIA_URL para señalar las páginas en el servidor lighttpd que sirve el material estático.

0

Relativamente rápido y fácil en los recursos cuando se utiliza NGINX para servir archivos multimedia y estáticos. Así es como va. Sin embargo, deberá adaptar algunas rutas de acuerdo con su caso de uso y sistema. Pero creo que esto le ayudará a empezar:

1) Descargar Nginx para su sistema, en su caso de Windows: http://nginx.org/

2) desempaquetar el archivo zip. Así es como se verá tu archivo de configuración NGINX. Este archivo reside en el interior nginx/conf/:

worker_processes 1; 

events { 
    worker_connections 1024; 
} 

http { 
    include mime.types; 
    default_type application/octet-stream; 
    sendfile on; 
    keepalive_timeout 65; 
    # root path to your project 
    # use "..." if spaces are in the path 
    # you may add a drive letter if required, e.g. root c:/foo 
    # use/instead of \. It's simpler and works 
    root /example/path/django/project/; 
    server { 
     # any free port number will do; Django dev server usually runs on port 80 
     listen 8000 default; 
     server_name localhost; # or 127.0.0.1 
    } 
} 

3) Inicio Nginx llamando a los nginx.exe - no hay opciones necesarias.

4) Tweak settings.py de archivos de su proyecto Djnago:

if DEBUG: 
    STATIC_URL = 'http://localhost:8000/static/' 
    # against Django recommendation, I often still use the static 
    # directory for user uploads; old-style Django ;-) 
    MEDIA_URL = 'http://localhost:8000/static/uploads/' 

Ahora, las direcciones URL estáticas en Django debería ser algo como esto: http://localhost:8000/static/js/base.js

...5) Detener el servidor llamando a:

taskkill /f /IM nginx.exe 

Bueno, eso es todo. Escribí esto rápidamente, así que avíseme si algo no está claro o no está funcionando para usted. Puedo mejorar esta respuesta en consecuencia.

Cuestiones relacionadas