Создание HTML с шаблонами по сравнению с созданием его в JavaScript? - PullRequest
5 голосов
/ 21 ноября 2010

Я недавно начал создавать веб-приложения, и хотя я делаю некоторые вещи, которые работают, я не уверен в лучших практиках.

До сих пор я в основном использовал системы шаблонов Django,web.py и PHP.Но теперь, когда я использую jQuery и хорошую магию ajaxy для получения данных с сервера без обновления клиента, я вижу преимущества построения HTML-кода непосредственно в javascript (поэтому я могу просто отправить небольшой объект json клиенту ипусть он выяснит, что и как изменить).

Итак, теперь у меня есть некоторые биты, которые отображаются с помощью шаблонов, и некоторые, встроенные в javascript, и даже один ужасный случай, где есть сочетание обоих:Шаблон web.py, который генерирует функцию javascript, которая создает HTML-таблицу - снова и снова напоминает макросы C!(Я реорганизую это в конце концов)

Это распространенная проблема в веб-разработке?Любые рекомендуемые рекомендации, такие как «использовать json для всего, рендерить как можно больше в javascript», «использовать библиотеку foo» и т. Д.?Любая хорошая эвристика в отношении того, что обрабатывать с помощью шаблонов и что обрабатывать с помощью javascript?

В поисках здесь я нашел кое-кого , спрашивающего о шаблонах javascript , что кажется возможным решением.

Ответы [ 5 ]

4 голосов
/ 21 ноября 2010

Пожалуйста, не используйте Javascript для верстки ваших страниц. Используйте его только там, где это необходимо.

Несмотря на недавние улучшения и стандартизацию, Javascript все еще обычно медленный, его трудно полностью совместить (вспомним старый IE и другие) и не очень совместим с некоторыми программами чтения с экрана и скребками / поисковыми системами.

Если вы можете сделать это, вернув прямой HTML, то, как правило, вы хотите именно этого.

2 голосов
/ 22 ноября 2010

Здесь есть немного связанный вопрос .

Возможно, вы можете использовать одни и те же шаблоны для обоих - эта библиотека выглядит интересно.

Вы можете отображать шаблоны только на сервере ... вопрос *У 1010 * сверху есть способ сделать это эффективно.

При необходимости вы можете продублировать определенные шаблоны в javascript - попробуйте jqtemplate .

Лично я бы, вероятно, отображал HTML только на стороне сервера, чтобы избежать дублирования шаблонов.Я сделал бы шаблоны JS, если бы мой сервер действовал как веб-служба JSON, возможно, также обслуживая других клиентов.

Тем не менее, если ваш сайт является доступным и не-js дружественным, важно для вас (так должно быть), тогда напишите свой сайт полностью без js, а затем постепенно улучшите it.

1 голос
/ 02 июля 2015

AngularJS - это популярное решение для шаблонизации на стороне клиента, которое я обнаружил спустя годы после того, как задал этот вопрос.Вы можете написать HTML-шаблоны ("partials") немного так же, как это было бы в Django, а затем использовать javascript-выборку и интерпретировать их по мере необходимости - так вы получите лучшее из обоих - динамический веб-сайт с четким разделением кода и макета.

1 голос
/ 22 ноября 2010

Я попал в ту же проблему некоторое время назад.У меня есть веб-страница, которая отображает что-то с помощью шаблонов web.py, и она имеет пагинацию ajax.Так что пришлось рендерить следующую страницу, используя javascript.В итоге я расширил шаблонизатор web.py, чтобы сгенерировать функцию javascript для вывода того же шаблона.

Подробнее об этом см. В этом блоге:

http://anandology.com/blog/javascript-templating-with-webpy/

1 голос
/ 22 ноября 2010

Никогда не основывайте функциональность вашего сайта на javascript. Если вы это сделаете, вы потеряете всех посетителей с отключенным JavaScript. Если вы действительно хотите, вам нужно либо обнаружить пользователей с отключенным JavaScript, и перенаправить их; или предоставить <noscript> альтернативу. Кроме того, хотя сканеры могут несколько дней анализировать javascript, это все еще наносит огромный ущерб SEO сайта. Также существуют проблемы с совместимостью и накладными расходами, которые могут возникнуть на современных мобильных устройствах, нетбуках и т. Д.

...