SlideShare a Scribd company logo
WE M EN & LI -EL T INWE M EN & LI -EL T IN
P O C OP O C O
1
Х О ЯХ О Я
Infopulse team/tech lead
BeerJS Zhytomyr
OdessaJS / Frontend://zt
Суддя DEV Challenge
Спікер
2
Г У Н 2016Г У Н 2016
3
Г У Н 2016Г У Н 2016
Попередній стек: Coffeescript, Pug, Stylus
3
Г У Н 2016Г У Н 2016
Визначаємо майбутній стек
Попередній стек: Coffeescript, Pug, Stylus
3
Г У Н 2016Г У Н 2016
Аналізуємо ринок
Попередній стек: Coffeescript, Pug, Stylus
Визначаємо майбутній стек
3
Г У Н 2016Г У Н 2016
Отримуємо деталі ТЗ
Попередній стек: Coffeescript, Pug, Stylus
Визначаємо майбутній стек
Аналізуємо ринок
3
РЕ Т : ПО Н А ЗА ІРЕ Т : ПО Н А ЗА І
Мінімальний об’єм збірки
Підтримка ІЕ11
Перевикористання коду
Автономність
Можливість наповнення менеджерами
4
C 2016C 2016
Січень 2017
5
С Е П О ТС Е П О Т
Січень - лютий
6
С Е П О ТС Е П О Т
Січень - лютий
6
С Е П О ТС Е П О Т
Січень - лютий
6
С Е П О ТС Е П О Т
Січень - лютий
6
С Е П О ТС Е П О Т
Січень - лютий
6
С Е П О ТС Е П О Т
Січень - лютий
6
Травень 2017
ВИ ІШИ ВИ ТИ "НА НІ" ВЕВИ ІШИ ВИ ТИ "НА НІ" ВЕ
КО Н И ДО ТО , ЯК ЦЕ С АКО Н И ДО ТО , ЯК ЦЕ С А
МЕЙН РІМОМЕЙН РІМО
7
КО Н И / Ф ЕЙМ О ККО Н И / Ф ЕЙМ О К
8
КО Н И / Ф ЕЙМ О ККО Н И / Ф ЕЙМ О К
8
КО Н И / Ф ЕЙМ О ККО Н И / Ф ЕЙМ О К
8
КО Н И / Ф ЕЙМ О ККО Н И / Ф ЕЙМ О К
8
PO M -> LI -EL T, LI -H LPO M -> LI -EL T, LI -H L
Травень 2017, Google IO
9
LI -H L. TE L TI NELI -H L. TE L TI NE
10
LI -H L. TE L TI NELI -H L. TE L TI NE
var div = document.createElement('div');
div.setAttribute('class', 'conference-is-hot');
10
LI -H L. TE L TI NELI -H L. TE L TI NE
var div = document.createElement('div');
div.setAttribute('class', 'conference-is-hot');
document.body.innerHTML = '<div class="conference-is-hot">Hello</div>';
10
LI -H L. TE L TI NELI -H L. TE L TI NE
var div = document.createElement('div');
div.setAttribute('class', 'conference-is-hot');
document.body.innerHTML = '<div class="conference-is-hot">Hello</div>';
<div ng-class="{conference-is-hot: hasHot}">{{sayHello}}</div>
10
LI -H L. TE L TI NELI -H L. TE L TI NE
var div = document.createElement('div');
div.setAttribute('class', 'conference-is-hot');
document.body.innerHTML = '<div class="conference-is-hot">Hello</div>';
<div ng-class="{conference-is-hot: hasHot}">{{sayHello}}</div>
<div classname="{hasHot ? 'conference-is-hot' : ''}">{this.sayHello}</div
10
LI -H L. TE L TI NELI -H L. TE L TI NE
var div = document.createElement('div');
div.setAttribute('class', 'conference-is-hot');
document.body.innerHTML = '<div class="conference-is-hot">Hello</div>';
<div ng-class="{conference-is-hot: hasHot}">{{sayHello}}</div>
<div classname="{hasHot ? 'conference-is-hot' : ''}">{this.sayHello}</div
const confTemplate = `
<div class="${hasHot ? 'conference-is-hot' : ''}">
${this.sayHello}
</div>
`;
10
LI -H LLI -H L
LIT = LITTLE
LIT = LIGHTWEIGHT
LIT = LITERALS
11
LI -H LLI -H L
Effecient. Native templates
Expressive. FP patterns
Extensible. Different templates, frameworks
12
AR .MA V RE E DI T EAR .MA V RE E DI T E
13
AR .MA V RE E DI T EAR .MA V RE E DI T E
const employeeList = (employees) => html`
<ul>
${repeat(employees, (employee) => employee.id, (employee, index) => h
<li>${index}: ${employee.familyName}, ${employee.givenName}</li>
`)}
</ul>
`;
13
AR .MA V RE E DI T EAR .MA V RE E DI T E
const employeeList = (employees) => html`
<ul>
${repeat(employees, (employee) => employee.id, (employee, index) => h
<li>${index}: ${employee.familyName}, ${employee.givenName}</li>
`)}
</ul>
`;
html`
<ul>
${items.map((item) => html`<li>${item}</li>`)}
</ul>
`;
13
NO NNO N
14
NO NNO N
import {html} from 'lit-html';
html`<slot>Sorry, no content available. I am just fallback content</slot>
14
NO NNO N
import {html} from 'lit-html';
html`<slot>Sorry, no content available. I am just fallback content</slot>
import {nothing, html} from 'lit-html';
html`
<shadow-element>${user.isAdmin
? html`<button>DELETE</button>`
: nothing
}</shadow-element>
`;
14
OTOT
15
OTOT
Cache
15
OTOT
ShadyHtml & ShadyCSS
Cache
15
OTOT
Asynchronous directives
Cache
ShadyHtml & ShadyCSS
15
OTOT
Built-in directives
Cache
ShadyHtml & ShadyCSS
Asynchronous directives
15
TOTO
16
TOTO
16
ВЕ М ЕНВЕ М ЕН
17
ВЕ М ЕНВЕ М ЕН
Інкапсуляція
Ізоляція
Комбінованість
18
ВЕ М ЕНВЕ М ЕН
Нативні Вебкомпоненти
19
ВЕ М ЕНВЕ М ЕН
Нативні Вебкомпоненти
Elements Custom Elements
19
ВЕ М ЕНВЕ М ЕН
Нативні Вебкомпоненти
DOM Encapsulation Shadow DOM
Elements Custom Elements
19
ВЕ М ЕНВЕ М ЕН
Нативні Вебкомпоненти
Style Encapsulation Shadow DOM
Elements Custom Elements
DOM Encapsulation Shadow DOM
19
ВЕ М ЕНВЕ М ЕН
Нативні Вебкомпоненти
Pseudo-Elements CSS Shadow Parts
Elements Custom Elements
DOM Encapsulation Shadow DOM
Style Encapsulation Shadow DOM
19
ВЕ М ЕНВЕ М ЕН
Нативні Вебкомпоненти
ARIA Accessibility Object Model
Elements Custom Elements
DOM Encapsulation Shadow DOM
Style Encapsulation Shadow DOM
Pseudo-Elements CSS Shadow Parts
19
Justin Fagnani
WE CO N S AR LO LE DO APWE CO N S AR LO LE DO AP
20
Justin Fagnani
Me :)
WE CO N S AR LO LE DO APWE CO N S AR LO LE DO AP
LI -EL T AR HI LE DO APLI -EL T AR HI LE DO AP
20
П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ
21
П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ
Створення DOM з шаблону
21
П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ
Ефективне оновлення DOM
Створення DOM з шаблону
21
П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ
Реактивність властивостей і данних
Створення DOM з шаблону
Ефективне оновлення DOM
21
П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ
Перевикористання та інкапсуляція стилів
Створення DOM з шаблону
Ефективне оновлення DOM
Реактивність властивостей і данних
21
П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ
Обов’язкові дії (створення Shadow Root)
Створення DOM з шаблону
Ефективне оновлення DOM
Реактивність властивостей і данних
Перевикористання та інкапсуляція стилів
21
П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ
...
Створення DOM з шаблону
Ефективне оновлення DOM
Реактивність властивостей і данних
Перевикористання та інкапсуляція стилів
Обов’язкові дії (створення Shadow Root)
21
LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ?
22
LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ?
Фреймворк?
22
LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ?
Поліфіл?
Фреймворк?
22
LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ?
Бібліотека?
Фреймворк?
Поліфіл?
22
LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ?
Лише базовий клас!
Фреймворк?
Поліфіл?
Бібліотека?
22
LI -EL TLI -EL T
class HelloElement extends LitElement {
static properties = {
conference: String
};
render() {
return html`<div>Hello ${this.conference}</div>`;
}
}
customElements.define('hello-world', HelloElement);
< html>
< head>
<script type="module" src="./hello-element.js"></script>
< /head>
< body>
<hello-world conference="JSFest"></hello-world>
<hello-world conference="Kyiv"></hello-world>
< /body>
< /html>
23
CC
class HelloElement extends LitElement {
static properties = {
conference: String
};
static styles = css`
:host {
background: purple;
}
div {
color: yellow;
}
`;
render() {
return html`<div>Hello ${this.conference}</div>`;
}
}
customElements.define('hello-world', HelloElement);
<hello-world conference="JSFest"></hello-world>
<div>Zhytomyr</div>
<hello-world conference="Kyiv"></hello-world>
24
**
СУПЕР УНІВЕРСАЛЬНИЙ СЕЛЕКТОРСУПЕР УНІВЕРСАЛЬНИЙ СЕЛЕКТОР
25
В А Т ТІВ А Т ТІ
26
В А Т ТІВ А Т ТІ
ТИПТИП
class HelloElement extends LitElement {
static get properties() {
'fontFamily': {
type: String,
},
};
}
26
В А Т ТІВ А Т ТІ
ІМ’ЯІМ’Я
class HelloElement extends LitElement {
static get properties() {
'fontFamily': {
type: String,
attributeName: 'font-family'
},
};
}
26
В А Т ТІВ А Т ТІ
РЕФЛЕКЦІЯРЕФЛЕКЦІЯ
class HelloElement extends LitElement {
static get properties() {
'fontFamily': {
type: String,
attributeName: 'font-family',
reflect: true
},
};
}
26
В А Т ТІВ А Т ТІ
ВЛАСНА УМОВАВЛАСНА УМОВА
class HelloElement extends LitElement {
static get properties() {
'fontFamily': {
type: String,
attributeName: 'font-family',
reflect: true,
hasChanged(value, oldValue) {
return value.type !== 'ttf'
}
},
};
}
26
В А Т ТІВ А Т ТІ
КОНВЕРТЕРКОНВЕРТЕР
class HelloElement extends LitElement {
static get properties() {
'fontFamily': {
type: String,
attributeName: 'font-family',
reflect: true,
hasChanged(value, oldValue) {
return value.type !== 'ttf'
},
converter: {
fromAttribute: (value, type) => { }
toAttribute: (value, type) => { }
}
},
};
}
26
ЖИ ЄВИЙ ЦИЖИ ЄВИЙ ЦИ
API постійно змінюється
@todo updateComplete
27
RE TU TRE TU T
28
UP CO LUP CO L
// `async` makes the function return a Promise & lets you use `await`
async myFunc(data) {
// Set a property, triggering an update
this.myProp = data;
// Wait for the updateComplete promise to resolve
await this.updateComplete;
// ...do stuff...
return 'done';
}
29
ВИ С А Н З ДЕ ТО ТАВИ С А Н З ДЕ ТО ТА
TT
@customElement('hello-world')
class HelloElement extends LitElement {
@property() name;
render() {
return html`<div>Hello ${this.conference}</div>`;
}
}
30
MO / NO LEMO / NO LE
<script type="module" src="component.js"></script>
<script nomodule="" src="component-die-ie.js"></script>
31
ІН Е Р ІЯ КО Н ІВ ІІН Е Р ІЯ КО Н ІВ І
ПЕ КО Т Я У VU /REПЕ КО Т Я У VU /RE
[ТУТ МАВ БУДЕ КОД, АЛЕ ЦЕ НЕ ПОТРІБНО][ТУТ МАВ БУДЕ КОД, АЛЕ ЦЕ НЕ ПОТРІБНО]
32
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
В ПРОЕКТІВ ПРОЕКТІ
33
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
В ПРОЕКТІВ ПРОЕКТІ
Вебкомпоненти всюди
33
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
В ПРОЕКТІВ ПРОЕКТІ
Продано першим трьом замовникам
Вебкомпоненти всюди
33
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
В ПРОЕКТІВ ПРОЕКТІ
Більше ніхто не звільняється
Вебкомпоненти всюди
Продано першим трьом замовникам
33
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
LIT-ELEMENT & LIT-HTMLLIT-ELEMENT & LIT-HTML
34
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
LIT-ELEMENT & LIT-HTMLLIT-ELEMENT & LIT-HTML
Літ елемент буде зменшуватись до повного знищення
34
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
LIT-ELEMENT & LIT-HTMLLIT-ELEMENT & LIT-HTML
Літ хтмл буде інтегруватись в стандарт
Літ елемент буде зменшуватись до повного знищення
34
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
У ВЕБКОМПОНЕНТАХУ ВЕБКОМПОНЕНТАХ
35
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
У ВЕБКОМПОНЕНТАХУ ВЕБКОМПОНЕНТАХ
Вебкомпоненти всюди
35
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
У ВЕБКОМПОНЕНТАХУ ВЕБКОМПОНЕНТАХ
Стандартизація
Вебкомпоненти всюди
35
РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є
У ВЕБКОМПОНЕНТАХУ ВЕБКОМПОНЕНТАХ
Інтеграція з фреймворками
Вебкомпоненти всюди
Стандартизація
35
ПО Н ЯПО Н Я
36
ПО Н ЯПО Н Я
lit-element.polymer-project.org
36
ПО Н ЯПО Н Я
lit-element.polymer-project.org
lit-html.polymer-project.org
36
ПО Н ЯПО Н Я
lit-element.polymer-project.org
lit-html.polymer-project.org
github.com/web-padawan/awesome-lit-html
36
ПО Н ЯПО Н Я
lit-element.polymer-project.org
lit-html.polymer-project.org
github.com/web-padawan/awesome-lit-html
vaadin.com/tutorials/lit-element/starting-a-lit-element-project
36
ПО Н ЯПО Н Я
lit-element.polymer-project.org
lit-html.polymer-project.org
github.com/web-padawan/awesome-lit-html
vaadin.com/tutorials/lit-element/starting-a-lit-element-project
www.webcomponents.org
36
ПО Н ЯПО Н Я
lit-element.polymer-project.org
lit-html.polymer-project.org
github.com/web-padawan/awesome-lit-html
vaadin.com/tutorials/lit-element/starting-a-lit-element-project
www.webcomponents.org
[DevFest Nantes 2019] Building a Complex Application with Web
Components and LitElement
36
ЯК МЕ З АЙТИЯК МЕ З АЙТИ
Twitter: sssrsav1
Telegram: @RomanSavitskyi
https://www.facebook.com/groups/beerJSZhytomyr
37

More Related Content

Similar to JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in production

Невивчені уроки або логи антивірусних війн
Невивчені уроки або логи антивірусних війнНевивчені уроки або логи антивірусних війн
Невивчені уроки або логи антивірусних війн
Vladyslav Radetsky
 
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
OdessaJS Conf
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net eleksdev
 
Grok web application framework
Grok web application frameworkGrok web application framework
Grok web application frameworkQuintagroup
 
Порівняння Drupal та Typo3
Порівняння Drupal та Typo3Порівняння Drupal та Typo3
Порівняння Drupal та Typo3Drupal Camp Kyiv
 
порівняння Drupal та Typo3
порівняння Drupal та Typo3порівняння Drupal та Typo3
порівняння Drupal та Typo3Inna Tuyeva
 
Html5
Html5Html5
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій МаренковJoomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
Igor Bronovskyy
 
"Incremental rollouts and rollbacks with business metrics control at every st...
"Incremental rollouts and rollbacks with business metrics control at every st..."Incremental rollouts and rollbacks with business metrics control at every st...
"Incremental rollouts and rollbacks with business metrics control at every st...
Fwdays
 
"How I don't need a state management library in React app", Tetiana Melnyk
"How I don't need a state management library in React app", Tetiana Melnyk "How I don't need a state management library in React app", Tetiana Melnyk
"How I don't need a state management library in React app", Tetiana Melnyk
Fwdays
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-C
Maksym Davydov
 
Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020
Stfalcon Meetups
 
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
Igor Bronovskyy
 
Twig in symfony
Twig in symfonyTwig in symfony
Twig in symfony
Dmitry Chabanenko
 
Випускна робота Лемеш
Випускна робота ЛемешВипускна робота Лемеш
Випускна робота Лемеш
vitaliy_galata
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii Nasinnyk
Fwdays
 
7_0711.pptx
7_0711.pptx7_0711.pptx
7_0711.pptx
ssuser53d8f2
 
Mka python jr-urok_01_ua_1563258764
Mka python jr-urok_01_ua_1563258764Mka python jr-urok_01_ua_1563258764
Mka python jr-urok_01_ua_1563258764
PavloTsiura
 

Similar to JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in production (20)

Невивчені уроки або логи антивірусних війн
Невивчені уроки або логи антивірусних війнНевивчені уроки або логи антивірусних війн
Невивчені уроки або логи антивірусних війн
 
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020'Why svelte' by BORYS MOHYLA at OdessaJS'2020
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net
 
Grok web application framework
Grok web application frameworkGrok web application framework
Grok web application framework
 
Порівняння Drupal та Typo3
Порівняння Drupal та Typo3Порівняння Drupal та Typo3
Порівняння Drupal та Typo3
 
порівняння Drupal та Typo3
порівняння Drupal та Typo3порівняння Drupal та Typo3
порівняння Drupal та Typo3
 
ASP.Net basics
ASP.Net basics ASP.Net basics
ASP.Net basics
 
Html5
Html5Html5
Html5
 
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій МаренковJoomla 3. Що нового для розробників у новій версії - Віталій Маренков
Joomla 3. Що нового для розробників у новій версії - Віталій Маренков
 
"Incremental rollouts and rollbacks with business metrics control at every st...
"Incremental rollouts and rollbacks with business metrics control at every st..."Incremental rollouts and rollbacks with business metrics control at every st...
"Incremental rollouts and rollbacks with business metrics control at every st...
 
"How I don't need a state management library in React app", Tetiana Melnyk
"How I don't need a state management library in React app", Tetiana Melnyk "How I don't need a state management library in React app", Tetiana Melnyk
"How I don't need a state management library in React app", Tetiana Melnyk
 
ASP.Net MVC
ASP.Net MVCASP.Net MVC
ASP.Net MVC
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-C
 
Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020Stfalcon QA Meetup 31.01.2020
Stfalcon QA Meetup 31.01.2020
 
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
 
Twig in symfony
Twig in symfonyTwig in symfony
Twig in symfony
 
Випускна робота Лемеш
Випускна робота ЛемешВипускна робота Лемеш
Випускна робота Лемеш
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii Nasinnyk
 
7_0711.pptx
7_0711.pptx7_0711.pptx
7_0711.pptx
 
Mka python jr-urok_01_ua_1563258764
Mka python jr-urok_01_ua_1563258764Mka python jr-urok_01_ua_1563258764
Mka python jr-urok_01_ua_1563258764
 

More from JSFestUA

JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript PerformanceJS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
JSFestUA
 
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
JSFestUA
 
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
JSFestUA
 
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JSFestUA
 
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
JSFestUA
 
JS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstackJS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstack
JSFestUA
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JSFestUA
 
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
JSFestUA
 
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developersJS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
JSFestUA
 
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
JSFestUA
 
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
JSFestUA
 
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the ScaleJS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
JSFestUA
 
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratchJS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
JSFestUA
 
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотятJS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
JSFestUA
 
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for RustJS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
JSFestUA
 
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
JSFestUA
 
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проектіJS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
JSFestUA
 
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядроJS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JSFestUA
 
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
JSFestUA
 
JS Fest 2019. Виктор Турский. 6 способов взломать твое JavaScript приложение
JS Fest 2019. Виктор Турский. 6 способов взломать твое JavaScript приложениеJS Fest 2019. Виктор Турский. 6 способов взломать твое JavaScript приложение
JS Fest 2019. Виктор Турский. 6 способов взломать твое JavaScript приложение
JSFestUA
 

More from JSFestUA (20)

JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript PerformanceJS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
 
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
 
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
 
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
 
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
 
JS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstackJS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstack
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
 
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
 
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developersJS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
 
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
 
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
 
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the ScaleJS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
 
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratchJS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
 
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотятJS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
 
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for RustJS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
 
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
 
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проектіJS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
 
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядроJS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
 
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
 
JS Fest 2019. Виктор Турский. 6 способов взломать твое JavaScript приложение
JS Fest 2019. Виктор Турский. 6 способов взломать твое JavaScript приложениеJS Fest 2019. Виктор Турский. 6 способов взломать твое JavaScript приложение
JS Fest 2019. Виктор Турский. 6 способов взломать твое JavaScript приложение
 

Recently uploaded

29.05.2024.docx29.05.2024.docx29.05.2024.docx
29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx
29.05.2024.docx29.05.2024.docx29.05.2024.docx
Репетитор Історія України
 
Віртуальна виставка «Допомога НАТО Україні»
Віртуальна виставка «Допомога НАТО Україні»Віртуальна виставка «Допомога НАТО Україні»
Віртуальна виставка «Допомога НАТО Україні»
Vinnytsia Regional Universal Scientific Library named after Valentin Otamanovsky
 
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdfПідсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
ssuser7541ef1
 
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
tetiana1958
 
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdfPOPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
Olga Kudriavtseva
 
Основи_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdfОснови_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdf
olaola5673
 
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdfLOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
Olga Kudriavtseva
 
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdfKUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
Olga Kudriavtseva
 
Главлит_2_0_Книжкова_цензура_в_Росії.pdf
Главлит_2_0_Книжкова_цензура_в_Росії.pdfГлавлит_2_0_Книжкова_цензура_в_Росії.pdf
Главлит_2_0_Книжкова_цензура_в_Росії.pdf
olaola5673
 
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
estet13
 

Recently uploaded (10)

29.05.2024.docx29.05.2024.docx29.05.2024.docx
29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx29.05.2024.docx
29.05.2024.docx29.05.2024.docx29.05.2024.docx
 
Віртуальна виставка «Допомога НАТО Україні»
Віртуальна виставка «Допомога НАТО Україні»Віртуальна виставка «Допомога НАТО Україні»
Віртуальна виставка «Допомога НАТО Україні»
 
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdfПідсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
Підсумки, перспективи роботи профспільнот педагогів ЗДО (2).pdf
 
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
Важливість впровадження стандарту ISO/IEC 17025:2019 у процес державних випро...
 
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdfPOPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
POPOVICH_Nina_PORTFOLIO_librarianCRE.pdf
 
Основи_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdfОснови_історичної_просвіти_—_для_перекладу.pdf
Основи_історичної_просвіти_—_для_перекладу.pdf
 
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdfLOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
LOBANOVA_Tetiana_PORTFOLIO_Librarian.pdf
 
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdfKUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
KUDRIAVTSEVA_Olha_PORTFOLIO_librarian.pdf
 
Главлит_2_0_Книжкова_цензура_в_Росії.pdf
Главлит_2_0_Книжкова_цензура_в_Росії.pdfГлавлит_2_0_Книжкова_цензура_в_Росії.pdf
Главлит_2_0_Книжкова_цензура_в_Росії.pdf
 
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
«Слова і кулі». Письменники, що захищають Україну. Єлизавета Жарікова
 

JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in production

  • 1. WE M EN & LI -EL T INWE M EN & LI -EL T IN P O C OP O C O 1
  • 2. Х О ЯХ О Я Infopulse team/tech lead BeerJS Zhytomyr OdessaJS / Frontend://zt Суддя DEV Challenge Спікер 2
  • 3. Г У Н 2016Г У Н 2016 3
  • 4. Г У Н 2016Г У Н 2016 Попередній стек: Coffeescript, Pug, Stylus 3
  • 5. Г У Н 2016Г У Н 2016 Визначаємо майбутній стек Попередній стек: Coffeescript, Pug, Stylus 3
  • 6. Г У Н 2016Г У Н 2016 Аналізуємо ринок Попередній стек: Coffeescript, Pug, Stylus Визначаємо майбутній стек 3
  • 7. Г У Н 2016Г У Н 2016 Отримуємо деталі ТЗ Попередній стек: Coffeescript, Pug, Stylus Визначаємо майбутній стек Аналізуємо ринок 3
  • 8. РЕ Т : ПО Н А ЗА ІРЕ Т : ПО Н А ЗА І Мінімальний об’єм збірки Підтримка ІЕ11 Перевикористання коду Автономність Можливість наповнення менеджерами 4
  • 10. С Е П О ТС Е П О Т Січень - лютий 6
  • 11. С Е П О ТС Е П О Т Січень - лютий 6
  • 12. С Е П О ТС Е П О Т Січень - лютий 6
  • 13. С Е П О ТС Е П О Т Січень - лютий 6
  • 14. С Е П О ТС Е П О Т Січень - лютий 6
  • 15. С Е П О ТС Е П О Т Січень - лютий 6
  • 16. Травень 2017 ВИ ІШИ ВИ ТИ "НА НІ" ВЕВИ ІШИ ВИ ТИ "НА НІ" ВЕ КО Н И ДО ТО , ЯК ЦЕ С АКО Н И ДО ТО , ЯК ЦЕ С А МЕЙН РІМОМЕЙН РІМО 7
  • 17. КО Н И / Ф ЕЙМ О ККО Н И / Ф ЕЙМ О К 8
  • 18. КО Н И / Ф ЕЙМ О ККО Н И / Ф ЕЙМ О К 8
  • 19. КО Н И / Ф ЕЙМ О ККО Н И / Ф ЕЙМ О К 8
  • 20. КО Н И / Ф ЕЙМ О ККО Н И / Ф ЕЙМ О К 8
  • 21. PO M -> LI -EL T, LI -H LPO M -> LI -EL T, LI -H L Травень 2017, Google IO
  • 22. 9
  • 23. LI -H L. TE L TI NELI -H L. TE L TI NE 10
  • 24. LI -H L. TE L TI NELI -H L. TE L TI NE var div = document.createElement('div'); div.setAttribute('class', 'conference-is-hot'); 10
  • 25. LI -H L. TE L TI NELI -H L. TE L TI NE var div = document.createElement('div'); div.setAttribute('class', 'conference-is-hot'); document.body.innerHTML = '<div class="conference-is-hot">Hello</div>'; 10
  • 26. LI -H L. TE L TI NELI -H L. TE L TI NE var div = document.createElement('div'); div.setAttribute('class', 'conference-is-hot'); document.body.innerHTML = '<div class="conference-is-hot">Hello</div>'; <div ng-class="{conference-is-hot: hasHot}">{{sayHello}}</div> 10
  • 27. LI -H L. TE L TI NELI -H L. TE L TI NE var div = document.createElement('div'); div.setAttribute('class', 'conference-is-hot'); document.body.innerHTML = '<div class="conference-is-hot">Hello</div>'; <div ng-class="{conference-is-hot: hasHot}">{{sayHello}}</div> <div classname="{hasHot ? 'conference-is-hot' : ''}">{this.sayHello}</div 10
  • 28. LI -H L. TE L TI NELI -H L. TE L TI NE var div = document.createElement('div'); div.setAttribute('class', 'conference-is-hot'); document.body.innerHTML = '<div class="conference-is-hot">Hello</div>'; <div ng-class="{conference-is-hot: hasHot}">{{sayHello}}</div> <div classname="{hasHot ? 'conference-is-hot' : ''}">{this.sayHello}</div const confTemplate = ` <div class="${hasHot ? 'conference-is-hot' : ''}"> ${this.sayHello} </div> `; 10
  • 29. LI -H LLI -H L LIT = LITTLE LIT = LIGHTWEIGHT LIT = LITERALS 11
  • 30. LI -H LLI -H L Effecient. Native templates Expressive. FP patterns Extensible. Different templates, frameworks 12
  • 31. AR .MA V RE E DI T EAR .MA V RE E DI T E 13
  • 32. AR .MA V RE E DI T EAR .MA V RE E DI T E const employeeList = (employees) => html` <ul> ${repeat(employees, (employee) => employee.id, (employee, index) => h <li>${index}: ${employee.familyName}, ${employee.givenName}</li> `)} </ul> `; 13
  • 33. AR .MA V RE E DI T EAR .MA V RE E DI T E const employeeList = (employees) => html` <ul> ${repeat(employees, (employee) => employee.id, (employee, index) => h <li>${index}: ${employee.familyName}, ${employee.givenName}</li> `)} </ul> `; html` <ul> ${items.map((item) => html`<li>${item}</li>`)} </ul> `; 13
  • 35. NO NNO N import {html} from 'lit-html'; html`<slot>Sorry, no content available. I am just fallback content</slot> 14
  • 36. NO NNO N import {html} from 'lit-html'; html`<slot>Sorry, no content available. I am just fallback content</slot> import {nothing, html} from 'lit-html'; html` <shadow-element>${user.isAdmin ? html`<button>DELETE</button>` : nothing }</shadow-element> `; 14
  • 41. OTOT Built-in directives Cache ShadyHtml & ShadyCSS Asynchronous directives 15
  • 44. ВЕ М ЕНВЕ М ЕН 17
  • 45. ВЕ М ЕНВЕ М ЕН Інкапсуляція Ізоляція Комбінованість 18
  • 46. ВЕ М ЕНВЕ М ЕН Нативні Вебкомпоненти 19
  • 47. ВЕ М ЕНВЕ М ЕН Нативні Вебкомпоненти Elements Custom Elements 19
  • 48. ВЕ М ЕНВЕ М ЕН Нативні Вебкомпоненти DOM Encapsulation Shadow DOM Elements Custom Elements 19
  • 49. ВЕ М ЕНВЕ М ЕН Нативні Вебкомпоненти Style Encapsulation Shadow DOM Elements Custom Elements DOM Encapsulation Shadow DOM 19
  • 50. ВЕ М ЕНВЕ М ЕН Нативні Вебкомпоненти Pseudo-Elements CSS Shadow Parts Elements Custom Elements DOM Encapsulation Shadow DOM Style Encapsulation Shadow DOM 19
  • 51. ВЕ М ЕНВЕ М ЕН Нативні Вебкомпоненти ARIA Accessibility Object Model Elements Custom Elements DOM Encapsulation Shadow DOM Style Encapsulation Shadow DOM Pseudo-Elements CSS Shadow Parts 19
  • 52. Justin Fagnani WE CO N S AR LO LE DO APWE CO N S AR LO LE DO AP 20
  • 53. Justin Fagnani Me :) WE CO N S AR LO LE DO APWE CO N S AR LO LE DO AP LI -EL T AR HI LE DO APLI -EL T AR HI LE DO AP 20
  • 54. П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ 21
  • 55. П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ Створення DOM з шаблону 21
  • 56. П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ Ефективне оновлення DOM Створення DOM з шаблону 21
  • 57. П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ Реактивність властивостей і данних Створення DOM з шаблону Ефективне оновлення DOM 21
  • 58. П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ Перевикористання та інкапсуляція стилів Створення DOM з шаблону Ефективне оновлення DOM Реактивність властивостей і данних 21
  • 59. П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ Обов’язкові дії (створення Shadow Root) Створення DOM з шаблону Ефективне оновлення DOM Реактивність властивостей і данних Перевикористання та інкапсуляція стилів 21
  • 60. П О ІЛИ В С Е ФІКА ІЯХП О ІЛИ В С Е ФІКА ІЯХ ... Створення DOM з шаблону Ефективне оновлення DOM Реактивність властивостей і данних Перевикористання та інкапсуляція стилів Обов’язкові дії (створення Shadow Root) 21
  • 61. LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ? 22
  • 62. LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ? Фреймворк? 22
  • 63. LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ? Поліфіл? Фреймворк? 22
  • 64. LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ? Бібліотека? Фреймворк? Поліфіл? 22
  • 65. LI -EL T. ЩО ЦЕ?LI -EL T. ЩО ЦЕ? Лише базовий клас! Фреймворк? Поліфіл? Бібліотека? 22
  • 66. LI -EL TLI -EL T class HelloElement extends LitElement { static properties = { conference: String }; render() { return html`<div>Hello ${this.conference}</div>`; } } customElements.define('hello-world', HelloElement); < html> < head> <script type="module" src="./hello-element.js"></script> < /head> < body> <hello-world conference="JSFest"></hello-world> <hello-world conference="Kyiv"></hello-world> < /body> < /html> 23
  • 67. CC class HelloElement extends LitElement { static properties = { conference: String }; static styles = css` :host { background: purple; } div { color: yellow; } `; render() { return html`<div>Hello ${this.conference}</div>`; } } customElements.define('hello-world', HelloElement); <hello-world conference="JSFest"></hello-world> <div>Zhytomyr</div> <hello-world conference="Kyiv"></hello-world> 24
  • 68. ** СУПЕР УНІВЕРСАЛЬНИЙ СЕЛЕКТОРСУПЕР УНІВЕРСАЛЬНИЙ СЕЛЕКТОР 25
  • 69. В А Т ТІВ А Т ТІ 26
  • 70. В А Т ТІВ А Т ТІ ТИПТИП class HelloElement extends LitElement { static get properties() { 'fontFamily': { type: String, }, }; } 26
  • 71. В А Т ТІВ А Т ТІ ІМ’ЯІМ’Я class HelloElement extends LitElement { static get properties() { 'fontFamily': { type: String, attributeName: 'font-family' }, }; } 26
  • 72. В А Т ТІВ А Т ТІ РЕФЛЕКЦІЯРЕФЛЕКЦІЯ class HelloElement extends LitElement { static get properties() { 'fontFamily': { type: String, attributeName: 'font-family', reflect: true }, }; } 26
  • 73. В А Т ТІВ А Т ТІ ВЛАСНА УМОВАВЛАСНА УМОВА class HelloElement extends LitElement { static get properties() { 'fontFamily': { type: String, attributeName: 'font-family', reflect: true, hasChanged(value, oldValue) { return value.type !== 'ttf' } }, }; } 26
  • 74. В А Т ТІВ А Т ТІ КОНВЕРТЕРКОНВЕРТЕР class HelloElement extends LitElement { static get properties() { 'fontFamily': { type: String, attributeName: 'font-family', reflect: true, hasChanged(value, oldValue) { return value.type !== 'ttf' }, converter: { fromAttribute: (value, type) => { } toAttribute: (value, type) => { } } }, }; } 26
  • 75. ЖИ ЄВИЙ ЦИЖИ ЄВИЙ ЦИ API постійно змінюється @todo updateComplete 27
  • 76. RE TU TRE TU T 28
  • 77. UP CO LUP CO L // `async` makes the function return a Promise & lets you use `await` async myFunc(data) { // Set a property, triggering an update this.myProp = data; // Wait for the updateComplete promise to resolve await this.updateComplete; // ...do stuff... return 'done'; } 29
  • 78. ВИ С А Н З ДЕ ТО ТАВИ С А Н З ДЕ ТО ТА TT @customElement('hello-world') class HelloElement extends LitElement { @property() name; render() { return html`<div>Hello ${this.conference}</div>`; } } 30
  • 79. MO / NO LEMO / NO LE <script type="module" src="component.js"></script> <script nomodule="" src="component-die-ie.js"></script> 31
  • 80. ІН Е Р ІЯ КО Н ІВ ІІН Е Р ІЯ КО Н ІВ І ПЕ КО Т Я У VU /REПЕ КО Т Я У VU /RE [ТУТ МАВ БУДЕ КОД, АЛЕ ЦЕ НЕ ПОТРІБНО][ТУТ МАВ БУДЕ КОД, АЛЕ ЦЕ НЕ ПОТРІБНО] 32
  • 81. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є В ПРОЕКТІВ ПРОЕКТІ 33
  • 82. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є В ПРОЕКТІВ ПРОЕКТІ Вебкомпоненти всюди 33
  • 83. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є В ПРОЕКТІВ ПРОЕКТІ Продано першим трьом замовникам Вебкомпоненти всюди 33
  • 84. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є В ПРОЕКТІВ ПРОЕКТІ Більше ніхто не звільняється Вебкомпоненти всюди Продано першим трьом замовникам 33
  • 85. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є LIT-ELEMENT & LIT-HTMLLIT-ELEMENT & LIT-HTML 34
  • 86. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є LIT-ELEMENT & LIT-HTMLLIT-ELEMENT & LIT-HTML Літ елемент буде зменшуватись до повного знищення 34
  • 87. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є LIT-ELEMENT & LIT-HTMLLIT-ELEMENT & LIT-HTML Літ хтмл буде інтегруватись в стандарт Літ елемент буде зменшуватись до повного знищення 34
  • 88. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є У ВЕБКОМПОНЕНТАХУ ВЕБКОМПОНЕНТАХ 35
  • 89. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є У ВЕБКОМПОНЕНТАХУ ВЕБКОМПОНЕНТАХ Вебкомпоненти всюди 35
  • 90. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є У ВЕБКОМПОНЕНТАХУ ВЕБКОМПОНЕНТАХ Стандартизація Вебкомпоненти всюди 35
  • 91. РЕ Ь И ТА МАЙБУ ЄРЕ Ь И ТА МАЙБУ Є У ВЕБКОМПОНЕНТАХУ ВЕБКОМПОНЕНТАХ Інтеграція з фреймворками Вебкомпоненти всюди Стандартизація 35
  • 92. ПО Н ЯПО Н Я 36
  • 93. ПО Н ЯПО Н Я lit-element.polymer-project.org 36
  • 94. ПО Н ЯПО Н Я lit-element.polymer-project.org lit-html.polymer-project.org 36
  • 95. ПО Н ЯПО Н Я lit-element.polymer-project.org lit-html.polymer-project.org github.com/web-padawan/awesome-lit-html 36
  • 96. ПО Н ЯПО Н Я lit-element.polymer-project.org lit-html.polymer-project.org github.com/web-padawan/awesome-lit-html vaadin.com/tutorials/lit-element/starting-a-lit-element-project 36
  • 97. ПО Н ЯПО Н Я lit-element.polymer-project.org lit-html.polymer-project.org github.com/web-padawan/awesome-lit-html vaadin.com/tutorials/lit-element/starting-a-lit-element-project www.webcomponents.org 36
  • 98. ПО Н ЯПО Н Я lit-element.polymer-project.org lit-html.polymer-project.org github.com/web-padawan/awesome-lit-html vaadin.com/tutorials/lit-element/starting-a-lit-element-project www.webcomponents.org [DevFest Nantes 2019] Building a Complex Application with Web Components and LitElement 36
  • 99. ЯК МЕ З АЙТИЯК МЕ З АЙТИ Twitter: sssrsav1 Telegram: @RomanSavitskyi https://www.facebook.com/groups/beerJSZhytomyr 37