Где я могу получить техническую информацию о том, как внутренности Django работают?

В некоторых случаях управляемый код может на самом деле быть быстрее , чем собственный код. Например, алгоритмы сборки "мусора" "метки-и-развертки" позволяют среды как JRE, или CLR для освобождения больших количеств недолгих (обычно) возражает в единственной передаче, где большинство объектов "кучи" C/C++ освобождено по одному.

От Википедия :

Для многих практических целей, allocation/deallocation-intensive алгоритмы, реализованные на собравших "мусор" языках, может на самом деле быть быстрее, чем их эквиваленты с помощью ручного выделения "кучи". Основная причина этого состоит в том, что сборщик "мусора" позволяет системе во время выполнения амортизировать операции выделения и освобождения потенциально выгодным способом.

Тем не менее я записал много C# и много C++, и я выполнил много сравнительных тестов. По моему опыту, C++ намного быстрее, чем C# двумя способами: (1) при взятии некоторого кода, который Вы написали в C#, портируйте его на C++, за которым собственный код ухаживает , чтобы быть быстрее. Насколько быстрее? Ну, это варьируется много, но весьма распространено видеть 100%-е улучшение скорости. (2) В некоторых случаях сборка "мусора" может в широком масштабе , замедляют управляемое приложение. CLR.NET делает ужасное задание с большой "кучей" (скажите>, 2 ГБ), и может закончить тем, что провел много времени в GC - даже в приложениях, которые имеют немногих - или даже нет - объекты промежуточных продолжительностей жизни.

, Конечно, в большинстве случаев что у меня есть encounted, управляемые языки достаточно быстры, намного, и компромисс обслуживания и кодирования для дополнительной производительности C++ является просто не хорошим.

7
задан gath 17 August 2009 в 04:38
поделиться

6 ответов

Самый простой способ понять внутреннее устройство django - это прочитать книгу, специально написанную для этого.

Прочтите Pro Django . Сначала он дает вам хорошее глубокое понимание метапрограммирования и демонстрирует, как оно используется в моделях django для их динамического создания.

Он аналогичным образом имеет дело со многими другими концепциями python и тем, как django его использует.

9
ответ дан 6 December 2019 в 05:06
поделиться

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

Я обнаружил, что блог Джеймса Беннета является отличным источником информации о работе django. Его книгу Практические проекты Django также необходимо прочитать - хотя она не сосредоточена на внутренних компонентах, вы все равно узнаете, как работает django.

12
ответ дан 6 December 2019 в 05:06
поделиться

«Используйте источник, Люк». Прелесть ПО с открытым исходным кодом в том, что вы можете просматривать (и изменять) код самостоятельно.

11
ответ дан 6 December 2019 в 05:06
поделиться

Простое чтение исходного кода может быть немного утомительным, особенно потому, что верхняя часть немного сбивает с толку (как веб-сервер передает запрос коду Django). Я считаю, что хороший способ начать чтение кода - это установить точку останова отладчика в вашей функции просмотра:

def time(request):
    import pdb; pdb.set_trace() 
    return HttpResponse(blah blah)

, затем нажать на свой URL. Когда отладчик прерывается в вашей точке останова, проверьте стек:

(Pdb) where
  c:\abcxyzproject\django\core\management\commands\runserver.py(60)inner_run()
-> run(addr, int(port), handler)
  c:\abcxyzproject\django\core\servers\basehttp.py(698)run()
-> httpd.serve_forever()
  c:\python25\lib\socketserver.py(201)serve_forever()
-> self.handle_request()
  c:\python25\lib\socketserver.py(222)handle_request()
-> self.process_request(request, client_address)
  c:\python25\lib\socketserver.py(241)process_request()
-> self.finish_request(request, client_address)
  c:\python25\lib\socketserver.py(254)finish_request()
-> self.RequestHandlerClass(request, client_address, self)
  c:\abcxyzproject\django\core\servers\basehttp.py(560)__init__()
-> BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
  c:\python25\lib\socketserver.py(522)__init__()
-> self.handle()
  c:\abcxyzproject\django\core\servers\basehttp.py(605)handle()
-> handler.run(self.server.get_app())
  c:\abcxyzproject\django\core\servers\basehttp.py(279)run()
-> self.result = application(self.environ, self.start_response)
  c:\abcxyzproject\django\core\servers\basehttp.py(651)__call__()
-> return self.application(environ, start_response)
  c:\abcxyzproject\django\core\handlers\wsgi.py(241)__call__()
-> response = self.get_response(request)
  c:\abcxyzproject\django\core\handlers\base.py(92)get_response()
-> response = callback(request, *callback_args, **callback_kwargs)
> c:\abcxyzproject\abcxyz\helpers\views.py(118)time()
-> return HttpResponse(
(Pdb)

Теперь вы можете увидеть сводку пути от самой глубокой части веб-сервера до вашей функции просмотра. Используйте команду «вверх» для перемещения вверх по стеку и команду «список» и «печать» для проверки кода и переменных в этих кадрах стека.

6
ответ дан 6 December 2019 в 05:06
поделиться

Я сомневаюсь, что есть технические руководства по этой теме. Возможно, потребуется немного покопаться, но документация по API и исходный код - лучший выбор для получения надежной и актуальной информации.

1
ответ дан 6 December 2019 в 05:06
поделиться

В документации часто подробно рассказывается, когда это необходимо, чтобы объяснить, почему что-то работает. как они это делают. Одна из целей дизайна Django - максимально не полагаться на «магию». Однако всякий раз, когда Django делает что-то (например, расположение шаблонов в приложениях), он четко объясняет, почему в документации, и это всегда происходит предсказуемо.

На большинство ваших вопросов можно будет ответить, реализовав одну страницу .

  1. Запрос сделан от клиента для определенного URL.
  2. URL решает, какое представление вызывать на основе совпадения с шаблоном URL.
  3. Запрос передается через промежуточное программное обеспечение.
  4. Представление вызывается и явно передает объект запроса.
  5. Представление явно вызывает указанный вами шаблон и передает ему указанный вами контекст (переменные).
  6. Обработчики контекста шаблона, если они есть, затем добавляют их собственные переменные в контекст.
  7. Контекст передается в шаблон, и он отображается.
  8. Визуализированный шаблон возвращается клиенту.

Документация Django

Django Book

0
ответ дан 6 December 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: