Как стать автором
Обновить

Комментарии 47

Шустрее doT пока всё-равно ничего не придумали.
Насколько я вижу, то сейчас там загружена в тестах не оптимизированная версия JsRender?

После этого инцидента:
Revision 400: published by [jsRender won through incorrect output — removed] on 12th April 2012

А во втором тесте у меня победу одержал: Kendo UI Templates (No «with» block)
Смотря какую ревизию рассматривать. Например, в 413, указанной на официальном сайте doT, jsRender вроде нормальный, из официального репозитория.

По общей сводке что JsRender, что Kendo UI Templates проигрывают doT.
Не нашёт сравнительных тестов…
Ага. Единственное, для поиска ошибок в шаблонах ничего не сделано.
Ну, строку, конечно, не пишет, но ошибка вполне себе нормально видна в консоли и по её тексту можно догадаться, что именно не так.
Хорошо бы ещё написать про JsViews, вместе с которым JsRender становится действительно вкусной вещью.
С JsViews ещё не работал, дальше примеров дело не дошло, а писать о том, с чем пока не имел реальной практики я посчитал лишним. Для тех кому интересно, что такое JsViews, могут зайти на сайт и посмотреть примеры, учитывая, что JsViews базируется на основе JsRender, знакомство я бы начал с последнего.
НЛО прилетело и опубликовало эту надпись здесь
Ответил ниже.
> Не совсем так, при генерации для установки id не следует использовать $(this).attr('id', 'foo')

Понятно, что $(this, { id: 'foo' }) проще, но в чём причина совета «не следует»?
НЛО прилетело и опубликовало эту надпись здесь
А как следует делать? Сразу в html собирать строку и передавать в $()?
НЛО прилетело и опубликовало эту надпись здесь
Вы привели пример установки, а я говорил о получении.

Вместо:
$('a').each(function(){
    console.log($(this).attr('id'));
});


Использовать:
$('a').each(function(){
    console.log(this.id);
});
я придумал? я лишь рассказал о данном проекте, никакого отношения к разработке JsRender я не имею. Синтаксис с Mustache.js похож, но обозначает он разные вещи, главное что пересекается — это {{ }}.
Было бы полезно сравнить результаты этого движка с остальными на jsPerf.

Вот я когда-то сравнивал свой KiTE с другими:
jsperf.com/dom-vs-innerhtml-based-templating/99

Кстати про KiTE. У меня используется базовый mustache синтаксис расширенный if секциями.
Template компилируется в своеобразный bytecode — массив из строк и функций. Получается в 25 раз быстрее чем mustache. Ну и это все в 180 LOC поместилось. Надо бы глянуть во что их движок вылился в результате.
А есть более подробные цифры?
Ну например: «Ваши зубы белее на 20%», а «был цвет RAL1013, а стал RAL9003»
Конечно есть, на 1500 элементах тесты показали:
460 ms +- 10% — наши шаблоны
21 ms +- 10% — JsRender

600 элементов: 190 ms и 7 ms соответственно.

А тесты с jQuery Template есть во втором абзаце.
Ожидаемо.
Я недавно получил аналогичные результаты, только делал это вручную:
habrahabr.ru/post/147252/
Было
Views: 490.9ms | ActiveRecord: 14.4ms
Стало
Views: 12.9ms | ActiveRecord: 17.1ms
Помоему сейчас столько шаблонизаторов развелось, что обсуждать преимущества одного над другим вообще смысла не имеет, мерится производительностью тоже (обычно грамотный шаблонизатор быстро работает а +- пара милисекунд не делают погоды)
Я даже больше скажу шаблонизаторы особо никому не нужны, обычно когда люди выбирают шаблонизатор — это знаит что на сайте мало js.
Если на сайте много js то люди уже выбирают средство для его структурирования, хороший фреймворк который организует код: будь то backbone или sproutcore или qooxdoo. Ну и как водится подобные рещения уже имеют свой шаблонизатор.
Так что дам совет тем кто выбирает шаблонизатор js:
1) У вам видимо небольшой сайт и не много js, 90% шаблонизаторов даже не покажут каких-либо задержек, бери любой который под рукой
2) У вас видимо реально большое приложение, где на основе тестов вы поняли что используемый шаблонизатор стал узким местом, тут мои советы излишни, вы сами знаете куда копать.

Я лично в последних проектах работал с backbone и соотвествено с шаблонизатором от underscore, тормозов не заметил, синтаксис приятен, что более нравится так там не надо заново учить новые операторы типо
{{for cast}}, зачем?? зачем этот синтаксис в шаблонизаторе, уже ведь есть js! поэтому в шаблонизаторе от undescore собственно три конструкции:
  1. <%= … %> вывести значение<% … %> произвольный js<%- … %> вывести с экранированием тегов html
    Фактически ничего не запоминаем нового и в тоже время пишем нужную логику без проблем.

    Я не рекламирую это шаблонизатор как лучший, просто маленький пример.
Тоже им пользуюсь, удобно.
К тому же есть возможность настроить синтаксис на свой вкус.
Да, я активно юзал эту возможность, шаблонизатор использует стандартные теги от jsp а у меня как раз нужна была обработка этих шаблонов как jsp перед выдачей, поменял <% %> на {{ }} :)
Интересно было бы почитать сравнение всего многообразия строковых JS шаблонок.

Сам использую micro templating Резига
А что там справнивать, я вот лично не собо понимаю, уточните
Есть ли какая-то разница между ними )
Не поверите!
1) библиотека лежащая в основе (jq template логично предположить без jq работать не будут, как и underscore)
2) Синтаксис
3)Скорость

Если будите выбирать то поступаем так:
1) Смотрим на то какая библиотека js используется в нашем проекте
2) Смотрим какие для этой библиотеки есть шаблонизаторы, выбираем самый приятный по синтаксису и функциям, по мне чем проще тем лучше, изучать дебри синтаксиса шаблона совсем не охота

Собственно все! На производительность смотреть только в том случа если они дает о себе знать ибо обычно в 97% это 5-10 шаблонов который выводят мелочь и их быстродействие ниоем образом не мешает юзеру. Вот когда вам в секунду 50 шаблонов рендерить придется тогда и задуматься стоит. А до этого ставьте на первое место удобство разработки и поддержки
1) библиотека лежащая в основе (jq template логично предположить без jq работать не будут, как и underscore)
в данном случае предположение является ложным, вот пример без зависимостей: JsRender without jQuery
О чем предположение? Вы наверное плохо читали. я имелл виду что выбор надо основывать учитывая библиотеку лежащую в основе приложения.
Используя бекбон у меня уже есть undersсore template зачем мне подключать еще один? Используя dojo у вас там тоже есть нативный шаблонизатор от dojo, у sproutcore также есть свой шаблонизатор, так зачем подключать в проект еще один?
Если нет серьузной причины используйте тот шаблонизатор что уже есть, вот когда он объективно не будет устраивать стоит думать о замене
сорри, не так понял смысл коммента
А зачем подписываться на библиотеко-зависимую шаблонку?
Вы тоже коментарии не читаете? Или вы любите пложить множество непонятных библиотек чтобы потом весейлей с ними жилось?
Перечитайте внимателней оба мои коментария выше.
Кладешь шаблонку без зависимостей, в чем проблема?

Цель шаблонки как я её понимаю, передать нечто и получить строку готового кода, тут не нужно, с моей точки зрения никаких либ.
Проблема в том что если функционал создания щаблонов уже заложен в библиотеку, а он заложен во многие фреймворки, подключать что-то сторонее как минимум глупо и в 99% случаем вы будити идиотом сделав это.
А оставшийся 1% я ждумаю вам не встретится никогда.
Ну вот я пользуюсь jQuery, в каком месте там встроенный шаблонизатор?
Уважаемый, вы совсем дурак? Читайте мои коментарии лучше. Вы не удосужились!
А речь шла о том, что если в вашем фреймворке уже есть возможность работы с шаблонами, то надо в первую очередь использовать имено её, а не подключать еще одну не понятную библиотеку.

И поверьте на одной jQuery жизнь не кончается.
Вы не ответили на вопрос.
Простите но видимо вам таки не понять. Успокойтесь и делайте как знаете.
Шаманство всё это. Плагин для jQuery без jQuery, под который нужно учить отдельный синтаксис.
Лучше Knockout-а вряд ли что-то можно придумать.
я бы на их месте использовал бы html5 атрибут data все таки не зра его вводят, вместо своего ng
Ну, там есть такая возможность: data-ng- вместо ng-

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

image

Но и для многих аспектов Нокаут предоставляет гораздо более удобное и лаконичное API. Те же кастомные байндинги в Нокауте делаются одной или двумя функциями, а в angular готового рецепта нет.
В AngularJS есть $scope.$watch("variable", function() { ... }) — в общем-то те-же observerables. А вот по поводу кастомных биндингов это вы совсем зря — есть же взиожность добавления кастомынх директив, даже на главной странице есть пример (про компоненты табов). Плюс за счет тех-же директив в ангуляре легко реализуются reusable-компоненты, с которыми в knockout была беда, насколько я понял (выбирал между двумя фреймворками).
Соглашусь. Многие теряют из виду тот факт, что темплейты Нокаута остаются валидным HTML-кодом, а значит их может править верстальщик или дизайнер без оглядки на синтаксис разработчиков. Тем более, с учетом того, что в большинстве случаев темплейты инлайнятся в текст страницы, а не прячутся в script тагах, темплейты верстальщик может править непосредственно по готовому живому HTML прямо из браузера.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации