Шаблонный с Javascript или Django? - PullRequest
15 голосов
/ 20 ноября 2010

Я создаю веб-приложение Django, в котором много html генерируется на лету с помощью запросов ajax. Прямо сейчас я использую язык шаблонов Django для создания html, а затем передаю этот новый HTML как строку в объекте JSON, который затем вводится на страницу с помощью jQuery.

Это работает довольно хорошо, но с учетом того, что Javascript очень быстр в современных браузерах и с таким количеством создаваемых библиотек шаблонов javascript, я задаюсь вопросом, стоит ли мне отодвигать все на сторону клиента.

Итак, мой вопрос: учитывая, что моя средняя «страница» со всеми запросами к ней и из нее должна скомпилировать в HTML около 300 шаблонов (каждый из примерно 15 или около того строк с 5 или более заменами) в течение своей жизни Есть ли существенное преимущество в производительности при создании шаблонов в браузере?

Кроме того, кто-нибудь может порекомендовать «быструю» библиотеку шаблонов Javascript? Я слышал хорошие новости о underscore.js, mustache.js и шаблоне jQuery.

Ответы [ 4 ]

5 голосов
/ 20 ноября 2010

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

3 голосов
/ 14 марта 2011

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

Каждый раз, когда вы генерируете серверную часть страницы, расходуется время обработки и некоторая пропускная способность сети. Это то, что вы платите, если используете хостинговые серверы.
Пока браузер пользователя ожидает ответа на обычном компьютере, ожидающем ответа.

Если вы отправляете шаблон на клиенте (HTML + JS), его можно кэшировать на время сеанса или даже дня, если пользователь не удаляет их.
Это уменьшает сетевой трафик для доставки того же содержание разное. Поскольку данные, как правило, меньше, чем их эквивалент, отображаемый HTML.

Как вы указали, современные движки Javascript действительно быстры, как и компьютер, на котором они работают. Каждый раз, когда вы отправляете работу рендеринга клиенту, вы экономите некоторое время обработки для своего сервера и быстрее доставляете данные.

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

0 голосов
/ 20 ноября 2010

Возможно создание шаблонов двойного назначения, чтобы их можно было преобразовывать в заполнители для замены на js, и в то же время они могли бы отображаться нормально для вывода на сервер.Только несколько шаблонов должны иметь двойное назначение: фрагменты, которые должны быть заменены на js.

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

В идеале вы можете захотеть иметь шаблоны, скомпилированные в надежную функцию javascriptкод, а также простая строка для вывода сервером.

Шаблоны закрытия , называемые Soy, решают проблему красиво, но не (возможно, пока) работают с python, но они работаютс Java и Javascript.Надеюсь, однажды будет поддержка Python для этого.

Но даже если это произойдет, язык шаблонов, вероятно, будет более ограниченным, поскольку будет сложно заставить такие вещи, как .get_absolute_url(), фильтры и т. Д. Работать как в python, так и в javascript - все автоматически.

0 голосов
/ 20 ноября 2010

Почему вы передаете HTML как JSON? Просто отправьте обратно HTML-код и используйте функцию jQuery $.html(), чтобы поместить его в <div> или что-то еще.

Что касается шаблонов в Javascript, есть Pure . Если вы используете jQuery (я бы порекомендовал), у него уже есть шаблонизатор .

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