Создание веб-страницы с главным образом javascript / dojo в django? - PullRequest
0 голосов
/ 21 марта 2012

Я использую django и его систему шаблонов. Поработав некоторое время, я почувствовал, что редактировать шаблон было больно, если мне пришлось бы существенно изменить представление или разобраться с организацией модульности шаблона. Я уверен, что многие из вас не согласны с этой оценкой. В любом случае, я хочу вместо этого позволить каждому представлению отправлять объект JSON клиенту и, используя javascript / dojo на стороне клиента, визуализировать весь сайт. Конечно, представления по-прежнему будут организованы в стиле django, и мне придется правильно организовать JSON.

Я понимаю, что с этим могут быть проблемы с производительностью. В то же время меня также беспокоит время загрузки (синхронное), которое может произойти из-за загрузки всего javascript, затем json, а затем, наконец, html. Но, возможно, хороший алгоритм отображения страницы может помочь смягчить эти проблемы, возможно, что-то вроде ленивого загрузчика. В любом случае, может ли этот дизайн работать хорошо?

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

Хороший пример этого шаблона проектирования можно найти в " Mastering Dojo ". На самом деле вся книга советует нам делать сайты таким образом , когда речь идет о насыщенных интернет-приложениях . Может быть, это немного излишне для обычного веб-сайта с разными страницами.

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

Схематически (из книги) вы получите несколько функций, которые распараллеливаются посредством отложенных / обещаний, например:

function init() { // initialize global variables }

function getData() { // retrieve data from the server }

function getMetaData() { // retrieve metadata from the server }

function continueWithData() { // push data into cache }

function continueWithMetadata() { // prepare panel with HTML controls, etc. }

function finish() { // Push data into HTML controls and release the panel to the user }

Эти функции связаны следующим образом:

  init()
    |
    v
 -----------------------------------------------
    |                             |
    v                             v
 getData()                     getMetadata()
    |                             |
    v                             v
continueWithData()              continueWithMetadata()
    |                             |
    v                             v
  ----------------------------------------------
                     |
                     v
                   finish()

Приношу свои извинения за копирование схемы книги. Надеюсь, я не нарушаю авторских прав, и в блогах могут быть более совершенные шаблоны, но мне очень нравится, как это там объясняется, так что ...

Весь параллелизм реализуется через dojo.Deferreds. Я думаю, что теперь проще с dojo.when / dojo.then , так что вы можете попробовать ...

0 голосов
/ 21 марта 2012

Существует множество приложений, которые спроектированы таким образом, и большая часть производительности (как положительной, так и отрицательной) зависит от силы используемой библиотеки javascript и, как вы уже догадались, от того, как она справляется с отложенной загрузкой и кэшированием.

Проект django-extjs делает это с библиотекой extjs sencha. Вы можете получить от этого вдохновение или просто использовать его из коробки.

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