Комментарии 164
Крутая статья. В закладки.
-2
Статья интересная, а подача требует «внезапно» сломать голову.
+34
подача клоунская, портит годную статью.
+93
кажется ты слишком напряжён :-о *массирует плечи* расслабься!
-13
кажется, вы слишком любите говорить от третьего лица, что и превращает годную статью в кукольный театр.
А вообще, очень интересный подход к шаблонам. Фактически как у Резига в результате получаются скомпилированные шаблоны, но в гибче с точки зрения выходных данных
А вообще, очень интересный подход к шаблонам. Фактически как у Резига в результате получаются скомпилированные шаблоны, но в гибче с точки зрения выходных данных
+7
Мне было реально трудно ее читать из-за этих *напрягающих* вставок
+60
НЛО прилетело и опубликовало эту надпись здесь
никаким, но если очень хочется, то:
TT.template( '{[}{xxx}{]}' )({ '[': '{', ']': '}', xxx: 777 })
TT.template( '{[}{xxx}{]}' )({ '[': '{', ']': '}', xxx: 777 })
+1
Выглядит как жесткое порно.
+30
а почему не сделать экранирование двойными скобками, например
{{{variable}}}
выведет {значение}
0
теперь для экранирования достаточно удвоить фигурную скобку
0
Вычитав еще пару раз драматургический опус статью, мне понравился подход :), спасибо.
+1
НЛО прилетело и опубликовало эту надпись здесь
а как будет понятнее, проще или красивее?
0
Очень удобно, красиво и уже сравнительно давно изобретено. И оттестировано многими разработчиками.
+2
значит тебе не составит труда переписать мой пример на каждый из них?
-1
На embeddedjs.com/ есть отличная интерактивная демка.
+1
Почему нету точек с запятой в конце строк?
Они, конечно, не обязательны, но крайне желательны, и без них невозможно "упаковать" скрипт
Они, конечно, не обязательны, но крайне желательны, и без них невозможно "упаковать" скрипт
+4
м… а зачем его упаковывать в одну строку? х) это же не букмарклет какой-нибудь…
-4
Если поставить галочку возле Shrink variables размер уменьшиться в 1.8 раза.
+2
а семиколоны тут при чём?
-3
При том, что всё сворачивается в одну строчку для уменьшения размера почти на 30%
+3
ты предлагаешь добавить 30% семиколонов, чтобы можно было вырезать 30% переводов строк? х) шило на мыло…
-5
Во-первых, есть еще пробелы для форматирования.
Во-вторых, не в каждой строчке надо ставить семиколон.
В-третьих, перевод строк частенько состоит из 2х байт.
Во-вторых, не в каждой строчке надо ставить семиколон.
В-третьих, перевод строк частенько состоит из 2х байт.
+4
1. пробелы можно вырезать независимо от наличия семиколонов
2. как и перенос строки
3. какие проблемы редуцировать перенос строки до 1 символа?
2. как и перенос строки
3. какие проблемы редуцировать перенос строки до 1 символа?
-4
Зачем изобретать велосипед?
+3
я и не предлагаю
-2
тогда смысл экономить на семиколонах?
+5
потому что перевод строки необходим и достаточен.
-4
Замкнутый круг. Перейдите в начало ветки.
+4
Когда-то прочёл, что если точек с запятыми нет, то некоторые (многие?) движки сначала их предварительно расставляют (выглядит странно), что негативно сказывается на производительности. Или сильнее напрягаются в парсинге (что вполне объяснимо). С теми же последствиями. Зуб за эту информацию не даю, продаю за что купил, но с некоторых пор сменил бесточекасзапяточный :) стиль обратно на классический. Мне не жалко, а шансов нарваться на ошибку парсинга чуть меньше, ну и со скоростью — вдруг не соврали…
+2
разница в скорости незначительна.
никто их при парсинге не расставляет, ибо они являются лишь разделителями операторов
никто их при парсинге не расставляет, ибо они являются лишь разделителями операторов
0
>разница в скорости незначительна.
Я не проверял.
>никто их при парсинге не расставляет, ибо они являются лишь разделителями операторов
Расставляет. Об этом даже есть специальный раздел в стандарте. Automatic Semicolon Insertion называется. Ну, то есть, физически можно не вставлять, но поведение должно соответствовать варианту, как будто вставляется.
Я не проверял.
>никто их при парсинге не расставляет, ибо они являются лишь разделителями операторов
Расставляет. Об этом даже есть специальный раздел в стандарте. Automatic Semicolon Insertion называется. Ну, то есть, физически можно не вставлять, но поведение должно соответствовать варианту, как будто вставляется.
+1
это всего-лишь игра слов для простоты понимания.
0
Это описание поведения интерпретатора. И парсер именно так и работает. Фиг с ней со скоростью, главное тут побочные эффекты.
+1
парсер создаёт дерево инструкций. в этом дереве нет ни семиколонов, ни переводов строк.
0
??? При чём здесь дерево инструкций? Описано поведение парсера во время парсинга исходного текста.
+2
ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7
парсер не занимается расстановкой точек х)
парсер не занимается расстановкой точек х)
0
ECMAscript Language Specification, пункт Automatic Semicolon Insertion.
Там описано как должен вести себя парсер языка ECMAscript. Как ведёт себя парсер из википедии меня совершенно не волнует. Вы полагаете, яваскриптовые движки пишут по википедии, а не по спецификации? Ну-ну.
Там описано как должен вести себя парсер языка ECMAscript. Как ведёт себя парсер из википедии меня совершенно не волнует. Вы полагаете, яваскриптовые движки пишут по википедии, а не по спецификации? Ну-ну.
+1
парсеры пишут по уму. а спецификация описывает лишь эталонную реализацию.
ни один программист не будет писать парсер автоматически вставляющий семиколоны, банально потому, что это медленно и бессмысленно.
ни один программист не будет писать парсер автоматически вставляющий семиколоны, банально потому, что это медленно и бессмысленно.
+1
не говорите глупостей, я лично собираю все скрипты в один пак, сжимаю. На выброс идет пакованый скрипт + gzip + кэшируется. В итоге клиент получает 57.9 KB вместо 220кб ;)
+5
Семиколоны в некоторых случаях должны быть по стандарту. Если их нет — движок пытается «угадать». Логично предположить, что не всегда он угадает правильно.
Именно поэтому надо их ставить везде. А убирать, для компенсации, переносы строк ;-)
Именно поэтому надо их ставить везде. А убирать, для компенсации, переносы строк ;-)
+2
должны быть они лишь в цикле for. в остальных случаях перевод строки делает их использование бессмысленным.
-1
Вот пример. Падает с ошибкой из-за пропущенной ;.
<script>
var a = 5
(true)
</script>
Интерпретатор трактует это как вызов функции 5(true). Так что ставьте везде семиколоны ;-)
<script>
var a = 5
(true)
</script>
Интерпретатор трактует это как вызов функции 5(true). Так что ставьте везде семиколоны ;-)
+1
это синтетический пример.
-1
<script>
var a = 5
(condition? obj1: obj2).callSomeFunc()
</script>
Тоже самое. Пример, более близкий к жизни, коли вам так угодно.
Если следующая строка с точки зрения синтаксиса может быть продолжением предыдущей — она станет продолжением предыдущей. Если не может — будет автоматически вставлен семиколон.
var a = 5
(condition? obj1: obj2).callSomeFunc()
</script>
Тоже самое. Пример, более близкий к жизни, коли вам так угодно.
Если следующая строка с точки зрения синтаксиса может быть продолжением предыдущей — она станет продолжением предыдущей. Если не может — будет автоматически вставлен семиколон.
+2
а это говнокод :-Р надо писать так:
var a= 5
var obj= condition? obj1: obj2
obj.callSomeFunc()
var a= 5
var obj= condition? obj1: obj2
obj.callSomeFunc()
-4
Ну говнокод это или нет — вопрос отдельный, другое дело что это конкретный, реальный пример когда точки с запятыми нужны. Сколько таких примеров можно при желании найти еще и где они всплывут — науке не известно. Именно по этому я считаю, что точки с запятыми надо ставить всегда.
+2
НЛО прилетело и опубликовало эту надпись здесь
Нужно отобрать у автора как можно больше ЛСД.
+9
клоунада, а не статья
+2
порно^W задорно ;)
+1
И Смешно и поучительно одновременно
0
НЛО прилетело и опубликовало эту надпись здесь
Жаль, а ведь, наверное, что–то интересное написано. Ведь правда? *обнимаю в охапку и плачу*
+5
А чем отличается объявление:
TT.html= function( tpl )…
от:
TT.html.encoder= new function( )…
С какой целью в одном имеется оператор new, а в другом нет?
TT.html= function( tpl )…
от:
TT.html.encoder= new function( )…
С какой целью в одном имеется оператор new, а в другом нет?
+1
new используется для создания дополнительного скопа, куда помещаются статические переменные, необходимые для определяемой функции
0
1) скоп — что это?
2) чем переменная в функции без new будет отличаться от функции с new?
Да и вообще, можешь рассказать об этом подробнее?
А то я даже вопросов пока сформулировать не могу толком =)
2) чем переменная в функции без new будет отличаться от функции с new?
Да и вообще, можешь рассказать об этом подробнее?
А то я даже вопросов пока сформулировать не могу толком =)
0
попробуй это: javascript.ru/basic/closure
+1
Не проще было написать что
var x = new function(){};
равносильно var x = (function(){})();
. 0
а зачем кстати новый скоуп для TT.template, почему было searcher просто внутрь не положить?
+1
в первом случае просто определяется анонимная функция, а во втором случае, благодаря оператору new она еще и вызывается, что приводит к созданию нового объекта вызова, в который попадают все определяемые внутри переменные
+1
тошно читать
0
Материал довольно интересен. То есть его можно кушать и нахваливать. Антураж весь вот этот лично для меня портит впечатление. То есть по итогам оценка — 0.
Но тут я вспоминаю слово «порева», меня передергивает еще разок и ставлю минус.
Но тут я вспоминаю слово «порева», меня передергивает еще разок и ставлю минус.
+6
ви таки порноненавистник? х)
-1
Таки нет, но есть вещи уместные и неуместные.
+1
скучный ты .-.
+3
Нет, просто я во всем люблю красоту. Можно сделать узбекский орнамент на ковровой рамке у портрета Путину или там украсить свой автомобиль лошадиным хвостом. Главное при этом остроумие, оригинальность изобретательность и пр.
Человек ведущий себя в разных ситуациях нестандартно может быть яркой личностью а может тупым неадекватом. Оба делают что-то «нескучное» на их субъективный взгляд, а получается по-разному. Андэстэнд?
Человек ведущий себя в разных ситуациях нестандартно может быть яркой личностью а может тупым неадекватом. Оба делают что-то «нескучное» на их субъективный взгляд, а получается по-разному. Андэстэнд?
+3
Если табуляцию выставить в два пробела — то уже не так страшно.
+1
НЛО прилетело и опубликовало эту надпись здесь
статья и особенно её подача впечатлили. ушло в избранное :)
+1
НЛО прилетело и опубликовало эту надпись здесь
По стилю здорово =) Разбавит немного хабрашаблоны и хабразаискивания. Так держать!
+2
Забавно все это конечно, только зачем что-либо экранировать на стороне JS?
+1
Перед сном детям читать
+1
Вам бы JS в яслях преподавать
+3
Выглядит зловеще:
Это действительно делает что-то полезное?
.split( '"' ).join( '"' )
Это действительно делает что-то полезное?
+1
материал неплохой, подача, соглашусь, чрез чур юморная. а так я сам нечто подобное использую для всего, что надо «отшаблонизировать»
+1
«чрез чур» :))
+1
а черт его знает как оно пишется :)
я в таких случаясь руководствуюсь правилом: как слышится, так и пишется
я в таких случаясь руководствуюсь правилом: как слышится, так и пишется
0
что такое ТТ?
+1
Переводы строк уходят в аут после парсинга.
Замените
Замените
/(.*?)(\{|\}|$)/gна
/([\s\S]*?)(\{|\}|$)/g, чтоли ;)
+1
А еще, возможно, стоит сделать так:
Тогда решится проблема с экранированием (две скобки == просто скобка):
/([\s\S]*?)(\{|\}|$)(?!\2)/g
Тогда решится проблема с экранированием (две скобки == просто скобка):
var template= TT.html( 'По {{fake}} запросу <kbd>{query}</kbd> найдено страниц: {count}' ) var message= template({ fake: 'этому', query: 'Ultimate Answer to the Ultimate Question of Life, The Universe, and Everything', count: 42 });
+1
к сожалению, не всё так просто…
TT.template( 'a{{{b}}}c' )({ b: 'd' }) должно преобразовываться в 'a{d}c'
TT.template( 'a{{{b}}}c' )({ b: 'd' }) должно преобразовываться в 'a{d}c'
0
А я вот, а я, по первым 2 строчкам догадался кто автор! Подход очень интересный, хотя конечно надо еще посмотреть насоклько это грузит браузер, все эти замыкания и прочая ересь.
+1
Hi I'm the author of pure.js mentioned above (thanks SMiX for the link).
I read this post through Chrome Translate, so please be nice!
At the beginning of your post, it looks you escapeHTML for security reasons.
I don't think you have to do that. The HTML scripts are not parsed when injected into a node through innerHTML.
I read this post through Chrome Translate, so please be nice!
At the beginning of your post, it looks you escapeHTML for security reasons.
I don't think you have to do that. The HTML scripts are not parsed when injected into a node through innerHTML.
+2
Кстати, а почему pipe получает массив? Лучше уж через arguments, тогда более походе на pipe ;)
+1
это практичней, когда надо протягивать массивы через цепочку функций. arguments в массив конвертятся очень накладно.
0
Про цепочку я что-то не понял, поясните пожалуйста. А насчет конвертации — Array.prototype.slice.call(arguments) работает везде, насколько я помню.
+1
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Притча о шаблонах