使Django开发服务器在提供静态媒体方面更快

时间:2010-03-01 19:26:45

标签: python django

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

有没有办法加快速度或采取某种解决方法?我正在使用Windows 7。

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

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

你可以尝试的一个技巧是将/ site_media重定向到第二个开发服务器,但这很难看,可能没那么多。因此,您可以尝试将多个资产捆绑/压缩为一个css / js(例如,使用YUI Compressor)。

在任何情况下,您都应该拥有可以同时为多个资产提供服务的独立静态媒体服务器。

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:2)

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

答案 4 :(得分: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.exe启动NGINX - 无需任何选项。

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

嗯,就是这样。我很快打了这个,所以请告诉我是否有什么不清楚或不适合你。我可以相应地改进这个答案。

答案 5 :(得分:0)

您可以尝试使用带有org.apache.log4j.Logger选项的django-extensions runserver_plus命令来代替Django的--threaded命令。在后台,它使用Werkzeug作为线程化的WSGI服务器。您可能会注意到静态文件加载时间的巨大改进。