2010-03-01 70 views
10

我使用Django manage.py runserver来开发我的应用程序(很明显),但它需要10秒才能完全加载页面,因为开发服务器的服务非常非常慢静态媒体。使Django开发服务器在服务静态媒体时更快

有什么办法可以加快它或某种解决方法?我正在使用Windows 7.

+3

你的页面如何变大?你提交什么尺寸的文件?你的静态媒体在哪里?你通过'http://127.0.0.1:8000'在一台计算机上运行,​​对吧?如果是这样,它应该运行得非常快。你是否通过Django视图函数提供静态内容?如果是这样,那是一个错误。 –

+0

一个页面的总重量约为53千字节,不会再有 - 但包含许多样式表,图像和JavaScript文件。我正在使用Django附带的静态媒体视图进行开发。 – Veeti

回答

7

请考虑使用mod_wsgi来代替,并让httpd处理静态媒体。

+2

+1:不要加快速度。考虑修复您的开发环境以使用合适的服务器。或者,考虑找出为什么你的静态媒体如此之慢。 –

+0

我该如何设置mod_wsgi以使其像开发服务器一样工作,自动重新加载所有更改? 快速的Google搜索返回了一些似乎是在Windows中无法使用的解决方案。 – Veeti

+0

wiki上有一个专门用于重新加载的条目,其中有一节讨论Win32问题。 –

5

开发服务器是简单的不安全的单线程应用程序,所以你不能做太多。

你可以尝试的一个诀窍是将/ site_media重定向到第二个开发服务器,但这很丑陋,可能无济于事。因此,您可以尝试将多个资产捆绑/压缩到一个css/js中(例如使用YUI Compressor)。

而且无论如何,你应该有独立的静态媒体服务器,可以一次提供多种资源。

3

安装Firefox(如果您尚未安装),并安装Firebug Add-On。重新启动您的浏览器。在右下角点击“bug”图标,并确保在浏览器底部打开的Firebug面板的“网络”选项卡(它是下拉菜单)中,网络监视器处于活动状态。

现在打开Firebug的网络选项卡,打开您观察到缓慢加载的Django生成的页面。看看时间线吧。您会注意到每个条的彩色碎片显示每个请求的“加载”总时间的原因。例如,Violet意味着实际上浏览器正在等待服务器生成响应。灰色意味着它正在接收内容。等等。将鼠标悬停在条上将显示一个颜色图例。

使用Firebug的网络监视器,您应该能够确定您的浏览器和/或服务器花费10秒钟的精确程度。

+2

资源的实际下载不需要任何时间,但开发服务器显然可以一次只处理一个请求,引起缓慢(?)。 – Veeti

+0

“一次请求一次” - 这是因为它是单线程的,所以所有请求都在队列中序列化。 –

2

运行lighttpd以提供静态内容,并使用MEDIA_URL将页面指向服务器静态内容的lighttpd服务器。

0

使用NGINX提供静态文件和媒体文件时,可快速轻松实现资源。这是怎么回事。但是,您需要根据您的使用情况和系统调整一些路径。但我认为,这将让你开始:

1)下载NGINX为你的系统,你的情况的Windows: http://nginx.org/

2)解压缩zip文件。以下是您的NGINX配置文件的外观。这个文件里面住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)开始NGINX通过调用nginx.exe - 不需要的选项。

4)调整你的Djnago项目settings.py文件:

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/' 

现在,在Django的静态URL应该是这个样子: http://localhost:8000/static/js/base.js

...5)通过呼叫停止服务器:

taskkill /f /IM nginx.exe 

好吧,就是这样。我很快输入了这个信息,所以如果有什么不清楚或者不适合你,请告诉我。我可以相应地改进这个答案。