SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
Шаблонизация
на клиенте


Степан Резников
разработчик интерфейсов

Я.Субботник, Москва, 3 июля 2010 года
Больше веб-приложений
работающих без перезагрузки

Чаще возникает задача шаблонизации
на клиенте




                                     2
Преимущества шаблонизации на клиенте:


Уменьшение трафика
Посылаем чистые данные — JSON или XML вместо HTML




Уменьшение нагрузки на сервер
Не нужно накладывать шаблон на сервере
Не нужно на каждый запрос доставать вспомогательные данные




                                                             3
Задача:

В JavaScript сгенерить блок (HTML),
заполнить его имеющимися данными и
вставить в DOM.




                                      5
Данные


var data = {
   url: "/test/",
   src: "test.gif",
   width: 60,
   height: 30,
   caption: "Трам-парам!"
};




                            6
Хотим получить вот такой HTML


<div class="preview">
 <p class="image">
  <a href="/test/">
    <img src="test.gif" width="60" height="30"/>
  </a>
 </p>
 <p class="caption">Трам-парам!</p>
</div>



                                                   7
В каком виде хранить шаблон?

Как вставить данные в шаблон?




                                8
DOM API

createElement

appendChild


громоздко

шаблон размазан тонким слоем по JS-коду




                                          9
Конкатенация кусочков шаблона
вперемешку с данными


var result = '<div class="preview"><p class="image"><a href="'
+ data.url + '"><img src="' + data.src + '" width="' + data.width +
'" height="' + data.height + '"/></a></p><p class="caption">' +
data.caption + '</p></div>';




                                                                      10
Простейший способ шаблонизации в JS




                Douglas Crockford

                                      11
Метод supplant



String.prototype.supplant = function(obj) {
  return this.replace(/{([^{}]*)}/g,
    function(a, b) {
      var r = obj[b];
      return typeof r === 'string' || typeof r === 'number' ? r : a;
    }
  );
};




                                                                       12
Метод supplant
var data = {
   url: "/test/",
   src: "test.gif",
   width: 60,
   height: 30,
   caption: "Трам-парам!"
};
var template = '<div class="preview"><p class="image"><a
href="{url}"><img src="{src}" width="{width}"
height="{height}"/></a></p><p
class="caption">{caption}</p></div>';

var result = template.supplant(data);


                                                           13
Метод supplant. Подстановка данных
в сообщение для пользователя

var data = {
   from: 'Madrid',
   to: 'Barcelona',
   number: '78A'
};

var template = 'Take train {number} from {from} to {to}.';

var result = template.supplant(data);



                                                             14
JS-шаблонизаторы

Micro-Templating   jTemplates

PURE     JST (TrimPath)

EJS (Embedded JavaScript)

JSONT     JBST     Jemplate

...



                                15
JavaScript-шаблонизатор
Micro-Templating
~20 строк, 1,2 КБ
http://ejohn.org/blog/javascript-micro-templating/




                                                     John Resig
                                                                  16
Micro-Templating


<script type="text/html" id="test_template">
 <div class="preview">
  <p class="image">
    <a href="<%=url%>">
     <img src="<%=src%>" width="<%=width%>" height="<%=height%>"/>
    </a>
  </p>
  <p class="caption"><%=caption%></p>
 </div>
</script>

<script type="text/javascript">
 var result = tmpl("test_template", data);
</script>



                                                                     17
Micro-Templating


<script type="text/html" id="tpl_comments">
 <ul class="comments">
  <% for (var i = 0, len = items.length; i < len; i++) { %>
    <%= tmpl("tpl_comment", items[i]) %>
  <% } %>
 </ul>
</script>

<script type="text/html" id="tpl_comment">
 <li class="comment">
  <div class="content"><%=content%></div>
  <div class="author"><%=author%>, <%=datetime%></div>
 </li>
</script>



                                                              18
Micro-Templating: компилирование
шаблона в функцию


var cache = {
  test_template: function (obj) {
    var p = [ ];
    with (obj) {
      p.push('<div class="preview"><p class="image"><a href="', url, '"><img
src="', src, '" width="', width, '" height="', height, '"/></a></p><p
class="caption">', caption, '</p></div>');
    }
    return p.join("");
  }
};




                                                                               19
Как выбрать
JS-шаблонизатор?
Синтаксис вставки данных


Micro-Templating
<img src="<%=src%>"/>

Microsoft Ajax 4.0 template engine
<img src="{{src}}"/>

jTemplates
<img src="{$T.src}"/>




                                     21
Язык выражений


Micro-Templating
<% for (var i = 0, len = items.length; i < len; i++) { %>

jTemplates
{#foreach $T.items as item}




                                                            22
Расположение шаблонов


Micro-Templating
<script type="text/html" id="template">
  ...
</script>

jTemplates
<textarea id="template" style="display:none">
   ...
</textarea>

Подгрузка шаблонов из отдельного файла
                                                23
Читабельность


Производительность


Вложенные шаблоны




                     24
XSLT на клиенте
XSLT (eXtensible Stylesheet Language
Transformations) — часть спецификации XSL,
задающая язык преобразований XML-
документов. Спецификация XSLT является
рекомендацией W3C.

XSLT — набор шаблонов

Применяем XSLT к XML-документу, получаем
другой XML, HTML или обычный текст.

Правила выбора данных из исходного XML
пишутся на языке запросов XPath.

                                             26
Как это работает
в хороших браузерах




                      27
// Создаем XSLT Processor
var xsltProcessor = new XSLTProcessor();

// Загружаем xsl-файл
var xhr = new XMLHttpRequest();
xhr.open("GET", "example.xsl", false);
xhr.send();

// Импортируем xsl-файл
xsltProcessor.importStylesheet(xhr.responseXML);




                                                   28
// Парсим XML из строки
var parser = new DOMParser();
var xml = parser.parseFromString("<data>
<url>/test/</url><src>test.gif</src><width>60</width><heig
ht>30</height><caption>Трам-парам!</caption></data>",
"text/xml");

// Выполняем трансформацию
var fragment =
   xsltProcessor.transformToFragment(xml, document);

document.body.appendChild(fragment);
www.stepanreznikov.com/client-side-xslt/01-fragment.html



                                                           29
// Выполняем трансформацию
var doc = xsltProcessor.transformToDocument(xml);

var out = document.adoptNode(doc.documentElement);
 или
var out = document.importNode(doc.documentElement, true);

document.body.appendChild(out);




www.stepanreznikov.com/client-side-xslt/02-document.html




                                                           30
?


    31
ActiveXObject

MSXML2.DOMDocument.6.0 (или 3.0)

MSXML2.FreeThreadedDOMDocument.6.0 (или 3.0)

MSXML2.XSLTemplate.6.0 (или 3.0)



Также нужно реализовать document.importNode

www.stepanreznikov.com/client-side-xslt/03-ie.html




                                                     32
Преимущества XSLT

Есть предикаты в матчах

<xsl:template match="Brands"/>

<xsl:template match="Brands[Brand]">
  <h2>Производители</h2>
  <ul><xsl:apply-templates select="Brand"/></ul>
</xsl:template>

<xsl:template match="Brands[count(Brand) > 10]">
  <h2>Много производителей</h2>
  <!-- Выводим бренды в три колонки -->
</xsl:template>
                                                   33
Преимущества XSLT

Есть вложенность в матчах


<xsl:template match="Brands/Brand">
  ...
</xsl:template>


<xsl:template match="SuperBrands/Brand">
  ...
</xsl:template>


                                           34
Преимущества XSLT

Есть моды


<xsl:template match="Brand" mode="navigation">
  ...
</xsl:template>


<xsl:template match="Brand" mode="promo-block">
  ...
</xsl:template>


                                                  35
Преимущества XSLT

Есть оси

<xsl:apply-templates select="following-sibling::item"/>

ancestor
ancestor-or-self
child
descendant
descendant-or-self
following
following-sibling
parent
preceding
preceding-sibling




                                                          36
Преимущества XSLT

Есть position(), first(), last()

<xsl:for-each select="item">
  <xsl:value-of select="."/>
  <xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>




                                                    37
Преимущества XSLT

Нет проблем с whitespace

Micro-Templating
<img src="<%=src%>"/>
<%=caption%>


XSLT
<img src="{src}"/>
<xsl:value-of select="caption"/>

Если нужно вывести пробел:
<xsl:text> </xsl:text> или <xsl:value-of select="' '"/>
                                                          38
Преимущества XSLT




Уже есть в браузере!
XSLT 1.0



                       39
Производительность
200 писем с метками
                Micro-Templating   JST (TrimPath)   XSL

Firefox 3.6.4   4                  12               10

IE 6            13                 43               10

IE 7            13                 42               10

Safari 4        2                  5                25

Chrome 5        2                  5                22

Opera 9.27      6                  22               20

Opera 10.54     2                  4                17
                                                          40
Оно вам
 надо?
Спасибо за внимание!

Вопросы?

Степан Резников
stepan@yandex-team.ru
twitter: @stepanvr

Weitere ähnliche Inhalte

Was ist angesagt?

Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkMoscowJS
 
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)AvitoTech
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
Сергей Максимов — BEMTREE — генерируй дерево
Сергей Максимов — BEMTREE — генерируй деревоСергей Максимов — BEMTREE — генерируй дерево
Сергей Максимов — BEMTREE — генерируй деревоYandex
 
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Yandex
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7Technopark
 
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareКак сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareYandex
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстромRoman Dvornov
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
Лекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилейЛекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилейЯковенко Кирилл
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 
Advanced Sql Injection
Advanced Sql InjectionAdvanced Sql Injection
Advanced Sql InjectionDmitry Evteev
 

Was ist angesagt? (19)

Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA Framework
 
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Сергей Максимов — BEMTREE — генерируй дерево
Сергей Максимов — BEMTREE — генерируй деревоСергей Максимов — BEMTREE — генерируй дерево
Сергей Максимов — BEMTREE — генерируй дерево
 
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7
 
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareКак сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
 
XSLT - 3
XSLT - 3XSLT - 3
XSLT - 3
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
МАПО Лаба №1
МАПО Лаба №1МАПО Лаба №1
МАПО Лаба №1
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
Лекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилейЛекция #4. Каскадные таблицы стилей
Лекция #4. Каскадные таблицы стилей
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Advanced Sql Injection
Advanced Sql InjectionAdvanced Sql Injection
Advanced Sql Injection
 

Andere mochten auch

Winning.catálogo.formação
Winning.catálogo.formaçãoWinning.catálogo.formação
Winning.catálogo.formaçãocarla_madeira
 
Contando Números Naturales
Contando Números NaturalesContando Números Naturales
Contando Números Naturalesyadixamartinez
 
Treinamento - Advanced Earned Value Management® (AEVM), Rio Janeiro, 21 - 25 ...
Treinamento - Advanced Earned Value Management® (AEVM), Rio Janeiro, 21 - 25 ...Treinamento - Advanced Earned Value Management® (AEVM), Rio Janeiro, 21 - 25 ...
Treinamento - Advanced Earned Value Management® (AEVM), Rio Janeiro, 21 - 25 ...vitorvargasr
 
Mais+Economia ed. 0001 (WEB)
Mais+Economia ed. 0001 (WEB)Mais+Economia ed. 0001 (WEB)
Mais+Economia ed. 0001 (WEB)revistamaismais
 

Andere mochten auch (8)

ApresentaçãO Vera
ApresentaçãO VeraApresentaçãO Vera
ApresentaçãO Vera
 
EducaçãO+..
EducaçãO+..EducaçãO+..
EducaçãO+..
 
Winning.catálogo.formação
Winning.catálogo.formaçãoWinning.catálogo.formação
Winning.catálogo.formação
 
Amigo não tem defeito
Amigo não tem defeitoAmigo não tem defeito
Amigo não tem defeito
 
Ceaces
CeacesCeaces
Ceaces
 
Contando Números Naturales
Contando Números NaturalesContando Números Naturales
Contando Números Naturales
 
Treinamento - Advanced Earned Value Management® (AEVM), Rio Janeiro, 21 - 25 ...
Treinamento - Advanced Earned Value Management® (AEVM), Rio Janeiro, 21 - 25 ...Treinamento - Advanced Earned Value Management® (AEVM), Rio Janeiro, 21 - 25 ...
Treinamento - Advanced Earned Value Management® (AEVM), Rio Janeiro, 21 - 25 ...
 
Mais+Economia ed. 0001 (WEB)
Mais+Economia ed. 0001 (WEB)Mais+Economia ed. 0001 (WEB)
Mais+Economia ed. 0001 (WEB)
 

Ähnlich wie Js templating stepan_reznikov

Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Yandex
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
 
Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Anton Arhipov
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17MoscowJS
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.Дмитрий Бумов
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflowit-people
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4Technopark
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CYandex
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один goBadoo Development
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10Technopark
 

Ähnlich wie Js templating stepan_reznikov (20)

Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 
Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
DSL без купюр
DSL без купюрDSL без купюр
DSL без купюр
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflow
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
 

Mehr von yaevents

Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...yaevents
 
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, ЯндексТема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, Яндексyaevents
 
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...yaevents
 
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндексi-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндексyaevents
 
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...yaevents
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaevents
 
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...yaevents
 
Мониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, ЯндексМониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, Яндексyaevents
 
Истории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, ЯндексИстории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, Яндексyaevents
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmannyaevents
 
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...yaevents
 
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...yaevents
 
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, ЯндексСканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндексyaevents
 
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, FacebookМасштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebookyaevents
 
Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...yaevents
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Googleyaevents
 
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...yaevents
 
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...yaevents
 
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигмаyaevents
 
Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...yaevents
 

Mehr von yaevents (20)

Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
 
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, ЯндексТема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
 
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
 
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндексi-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
 
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
 
Мониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, ЯндексМониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, Яндекс
 
Истории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, ЯндексИстории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, Яндекс
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmann
 
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
 
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
 
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, ЯндексСканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
 
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, FacebookМасштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
 
Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Google
 
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
 
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
 
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигма
 
Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...
 

Js templating stepan_reznikov