簡體   English   中英

使 Django 開發服務器在服務靜態媒體時更快

[英]Making Django development server faster at serving static media

我正在使用 Django manage.py runserver來開發我的應用程序(顯然),但是完全加載一個頁面需要10 秒,因為開發服務器在提供靜態媒體時非常非常慢。

有什么方法可以加快速度或某種解決方法嗎? 我正在使用 Windows 7。

考慮改用mod_wsgi ,並讓 httpd 處理靜態媒體。

開發服務器是簡單的不安全的單線程應用程序,因此您無能為力。

您可以嘗試的一個技巧是將 /site_media 重定向到第二個開發服務器,但這很丑陋,可能不會有太大幫助。 因此,您可以嘗試將多個資產捆綁/壓縮到一個 css/js 中(例如使用YUI Compressor )。

在任何情況下,您都應該擁有單獨的靜態媒體服務器,它可以同時為多個資產提供服務。

安裝 Firefox(如果您還沒有),然后安裝Firebug Add-On 重新啟動瀏覽器。 在右下角單擊“bug”圖標,並確保在瀏覽器底部打開的 Firebug 面板的“網絡”選項卡(它是一個下拉列表)中,網絡監視器處於活動狀態。

現在打開 Firebug 的網絡選項卡,打開您觀察到加載緩慢的 Django 生成的頁面。 看看時間線欄。 您會注意到每個條形的彩色片段指示每個請求的總“加載”時間的原因。 例如,Violet 意味着瀏覽器實際上正在等待服務器生成響應。 灰色表示它正在接收內容。 等等。 將鼠標懸停在條形上將顯示顏色圖例。

使用 Firebug 的網絡監視器,您應該能夠准確地確定您的瀏覽器和/或服務器在 10 秒內花費的時間。

運行 lighttpd 來提供靜態內容,並使用 MEDIA_URL 將頁面指向為靜態內容提供服務的 lighttpd 服務器。

使用 NGINX 提供靜態和媒體文件時,資源的使用速度非常快。 這是怎么回事。 但是,您需要根據您的用例和系統調整一些路徑。 但我認為這會讓你開始:

1) 為您的系統下載 NGINX,在您的情況下為 Windows: http ://nginx.org/

2) 解壓壓縮文件。 這是您的 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

嗯,就是這樣。 我打字很快,所以如果有什么不清楚或不適合你,請告訴我。 我可能會相應地改進這個答案。

您可以嘗試使用帶有--threaded選項的django-extensions runserver_plus命令來替代 Django 的runserver命令。 在幕后,它使用 Werkzeug 作為線程化 WSGI 服務器。 您可能會注意到靜態文件的加載時間有了巨大的改進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM