2010-03-01 92 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 

好吧,就是這樣。我很快輸入了這個信息,所以如果有什麼不清楚或者不適合你,請告訴我。我可以相應地改進這個答案。