[英]Django is not serving static and media files in development but it is serving in production
[英]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.