Ускоряем работу локального сервера в App Engine

Скорее всего многие разработчики, отлаживающие большие проекты под локальным сервером разработки в App Engine, столкнулись с проблемой его однопоточности. Если на странице содержится куча внешних css, js файлов и картинок, ожидание ее загрузки может вывести из себя даже стойкого человека.

Мы рассмотрим способ выноса статического содержимого приложения Django для обслуживания его сторонним сервером на базе пакета SimpleHTTPServer.

Сначала создаем скрипт, который будет использован для старта обоих серверов:

python simplehttpserver.py & dev_appserver.py -d --datastore_path="dev_appserver.datastore" .

Создаем файл simplehttpserver.py со следующим содержимым:

try:     import SimpleHTTPServer     import SocketServer     port = 9000     Handler = SimpleHTTPServer.SimpleHTTPRequestHandler     httpd = SocketServer.TCPServer(("", PORT), Handler)     httpd.serve_forever() except:     pass

Исключение будет срабатывать в том случае, если порт уже занят (сервер запускается повторно). Далее напишем специальную функцию, которая будет принимать в своих параметрах объекты фреймворка Django HttpResponse и HttpRequest, и при необходимости перенаправлять браузер на сервер со статическим содержимым (если сервер запущен локально). Для повторного использования ее лучше вынести в отдельный файл (например, utils.py).

def goFast(request,response):     developing = onDevelServer(request)     if developing:         for folder in ['images','css','js']:             dir = 'http://localhost:9000/%s/' % folder             response.content = response.content.replace('/%s/' % folder,dir)     return response def onDevelServer(request):     return request.META['SERVER_NAME'] == 'localhost'

Этот код выполняет замену в ответе адрес ‘/images/homepage_logo.png’ на ‘http://localhost:9000/images/homepage_logo.png’. Ну и в завершении, модифицируем функцию render_to_response:

from django.shortcuts import render_to_response as r2r from services.utils import goFast def render_to_response(template, ls):     return goFast(ls['request'], r2r(template,ls))

Это все, теперь можно насладиться скоростью работы!

Один ответ на “Ускоряем работу локального сервера в App Engine”

  1. Vitaliy:

    По моему намного проще и праильней использовать следующюю схему:
    делаем файл settings_local.py и импортируем его в setting (стандартная джанговская схема, надеюсь Вы поняли о чем я)
    добавляем этот файл в ignore в app.cfg
    далее в settins_local прописываем MEDIA_URL = ‘url локального сервера который хостит статику проекта’
    Берем лбой веб сервер и направляем его на статику нашего проекта
    Все

    PS. Естественно в шаблонах все пути к статике должны писаться через {{MEDIA_URL}}

Ответить