Ускорение работы сервера разработки Django на статических носителях - PullRequest
10 голосов
/ 01 марта 2010

Я использую Django manage.py runserver для разработки своего приложения (очевидно), но для полной загрузки страницы требуется 10 секунд , поскольку сервер разработки очень и очень медленно обслуживает статические носители.

Есть ли способ ускорить его или какой-то обходной путь? Я использую Windows 7.

Ответы [ 5 ]

7 голосов
/ 01 марта 2010

Попробуйте вместо этого использовать mod_wsgi и использовать httpd для обработки статического носителя.

5 голосов
/ 01 марта 2010

Сервер разработки - это простое небезопасное однопоточное приложение, поэтому вы ничего не можете сделать.

Один трюк, который вы можете попробовать, - это перенаправить / site_media на второй сервер разработки, но это уродливо и, вероятно, не очень поможет. Таким образом, вы можете попробовать объединить / сжать несколько ресурсов в один css / js (например, используя YUI Compressor ).

И в любом случае у вас должен быть отдельный статический медиа-сервер, который может обслуживать несколько ресурсов одновременно.

4 голосов
/ 02 марта 2010

Установите Firefox (если вы этого еще не сделали) и установите дополнение Firebug . Перезапустите браузер. В правом нижнем углу щелкните значок «ошибка» и убедитесь, что на вкладке «Сеть» (это раскрывающийся список) панели Firebug, которая открывается в нижней части браузера, активен сетевой монитор.

Теперь с открытой вкладкой сети Firebug откройте сгенерированную Django страницу, которая, как вы заметили, медленно загружалась. Посмотрите на шкалу времени. Вы заметите, что цветные фрагменты каждого столбца указывают причину общего времени загрузки каждого запроса. Например, Violet означает, что на самом деле браузер ожидает, пока сервер сгенерирует ответ. Серый означает, что он получает контент. И так далее. При наведении курсора на полосу отобразится цветовая легенда.

С помощью сетевого монитора Firebug вы сможете точно определить, как именно ваш браузер и / или сервер тратят свои 10 секунд.

2 голосов
/ 06 августа 2010

Запустите lighttpd для обслуживания статического содержимого и используйте MEDIA_URL, чтобы направить страницы на сервер lighttpd, который обслуживает статический контент.

0 голосов
/ 05 ноября 2015

Молниеносно и легко на ресурсы при использовании 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) Настройте файл settings.py вашего проекта в Djnago:

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

Теперь статические URL в Django должны выглядеть примерно так: http://localhost:8000/static/js/base.js

... 5) Остановите сервер, позвонив по номеру:

taskkill /f /IM nginx.exe

Ну вот и все. Я набрал это быстро, поэтому просто дайте мне знать, если что-то неясно или не работает для вас. Я могу улучшить этот ответ соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...