SlideShare a Scribd company logo
basis.js
production ready framework
1
Обо мне
@smelukov
Работаю в Avito
Делаю большое SPA
Преподаю JS
Учу создавать веб-приложения
Люблю JS и жену
Но больше жену
Популяризирую basis.js
Верю, что basis.js захватит мир
Сергей Мелюков
2
Когда я рассказываю про basis.js
‣ Зачем?! Есть же [X]
‣ basis.js - сложный, а [X] - простой
3
Возможно, я не точно доносил
смысл того, что такое basis.js и это
повлекло поспешные выводы
4
Действительно ли можно просто
взять любой фреймворк и сразу
начать делать веб-приложения?
5
Нет!
Любой фреймворк требует
изучения и опыта использования
6
Поговорим о том, какие
возможности дает basis.js из
коробки
7
План
‣ Компоненты
‣ Источники данных
‣ Локализация
‣ Трекинг событий
‣ Инструменты разработки
‣ Заключение
8
‣ Компоненты
‣ Источники данных
‣ Локализация
‣ Трекинг событий
‣ Инструменты разработки
‣ Заключение
9
basis.js - это компонентный
подход
10
OK
имя
фамилия
отчество
Отмена
11


new Node({

template: ...,

binding: {

firstName: ...,

lastName: ...,

}

});
12


new Node({

template: ...,

binding: {

firstName: ...,

lastName: ...

}

});
13
basis.js - это шаблоны без
логики
14
<li *ngFor="let item of items; let i = index; trackBy: trackByFn">...</li>

<li template="ngFor let item of items; let i = index; trackBy: trackByFn">...</li>
if (todos.length) {

main = (

<section className="main">

<input

className="toggle-all"

type="checkbox"

onChange={this.toggleAll}

checked={activeTodoCount === 0}

/>

<ul className="todo-list">

{todoItems}

</ul>

</section>

);

}

15
Логика в JS, шаблон в XHTML
16
<b:style src="./person.css"/>



<div class="person">

<div>Имя: {firstName}</div>

<div>Фамилия: {lastName}</div>

</div>
17
basis.js - это изоляция стилей и
модульный CSS
18
<b:style src="./person.css"/>

<b:isolate/>



<div class="person">

<div class="photo"> ... </div>

<div class="info"> ... </div>

</div>
<style> ... </style>



<div class="i1__person">

<div class="i1__photo"> ...</div>

<div class="i1__info"> ...</div>

</div>
19
‣ Компоненты
‣ Источники данных
‣ Локализация
‣ Трекинг событий
‣ Инструменты разработки
‣ Заключение
20
basis.js - это гибкое
взаимодействие с источниками
данных
21
Источником данных может быть
объект, коллекция объектов или
другой компонент
22


new Node({

template: ...,

binding: { ... },
dataSource: ... 

});
23
childNodes
Component
items
Dataset
(коллекция)
‣ model
‣ model
‣ model
‣ model
‣ model
‣ model
component
component
component
component
component
component
24
Контролировать источник данных
можно при помощи состояний
25
‣ processing - в состоянии синхронизации
‣ deprecated - данные устарели
‣ ready - готов к работе
‣ error - ошибка
26
Примеры использования?
Показываем спиннер, пока
загружаются данные
Обновляем устаревшие данные
basis.js - это автоматические
источники данных (индексы,
фильтры, etc…)
30
31
Выбранные друзья
items
Доступные друзья
items
‣ model
‣ model
‣ model???
32
Исключим выбранных друзей из
всех друзей и получим доступных
друзей
33
allFriends = new Dataset();
favoriteFriends = new Dataset();



availableFriends = new Subtract({

minuend: allFriends,

subtrahend: favoriteFriends

});
34
allFriends = new Dataset();
favoriteFriends = new Dataset();



availableFriends = new Subtract({

minuend: allFriends,

subtrahend: favoriteFriends

});
35
allFriends = new Dataset();
favoriteFriends = new Dataset();



availableFriends = new Subtract({

minuend: allFriends,

subtrahend: favoriteFriends

});
36
Почему не for?
37
Придется реализовать механизм
отслеживания изменений
38
Такой механизм уже встроен в
наборы basis.js!
39
allFriends = new Dataset();
favoriteFriends = new Dataset();



availableFriends = new Subtract({

minuend: allFriends,

subtrahend: favoriteFriends

});
40
А есть еще что-то, кроме Subtract?
41
42
‣ Merge - объединение коллекций
‣ Filter - фильтрация элементов коллекции
‣ Slice - срез элементов коллекции
‣ Split - деление коллекции на подмножества
‣ etc…
Для агрегации элементов коллекции
используются индексы
43
44
‣ Min - минимальное значение коллекции
‣ Max - максимальное значение коллекции
‣ Avg - среднее значение коллекции
‣ Sum - сумма элементов в коллекции
‣ etc…
Манипуляция с данными, а не с DOM
DOM - всего лишь отображение
45
‣ Компоненты
‣ Источники данных
‣ Локализация
‣ Трекинг событий
‣ Инструменты разработки
‣ Заключение
46
basis.js - это удобные
инструменты локализации
47
Словарь - это JSON-файл
48
{

"en-US": {

"hello": "Hello!"

},

"ru-RU": {

"hello": "Привет!"

}

}
49
{

"en-US": {

"hello": "Hello!"

},

"ru-RU": {

"hello": "Привет!"

}

}
<div>

{l10n:hello}

</div>
50
<div>

Привет!

</div>
51
В словарях можно использовать
биндинги и разметку
52
new Node({

template: ...
binding: {

firstName: ...,

lastName: ...

}

});
53
{

"_meta": {

"type": {

"hello": "markup"

}

},

"ru-RU": {

"hello": "Привет, <b>{firstName} {lastName}</b>"

}

}
{

"_meta": {

"type": {

"hello": "markup"

}

},

"ru-RU": {

"hello": "Привет, <b>{firstName} {lastName}</b>"

}

}
<div>

{l10n:hello}

</div>
55
<div>

Привет, <b>Иван Петров</b>

</div>
56
Грамматическое число
поддерживается на уровне словаря
57
new Node({

template: ...
binding: {

total: ...

}

});
58
{

"_meta": {

"type": {

"offer": "plural"

}

},

"ru-RU": {

"offer": [

"Всего {#} объявление",

"Всего {#} объявления",

"Всего {#} объявлений"

]

}

}
59
{

"_meta": {

"type": {

"offer": "plural"

}

},

"ru-RU": {

"offer": [

"Всего {#} объявление",

"Всего {#} объявления",

"Всего {#} объявлений"

]

}

}
<div>

{l10n:offer.{total}}

</div>
60
<div>

Всего 10 объявлений

</div>
61
‣ Компоненты
‣ Источники данных
‣ Локализация
‣ Трекинг событий
‣ Инструменты разработки
‣ Заключение
62
basis.js - это трекинг событий
63
Разметим компоненты и
шаблоны ролями
64
<div b:role>

<div> ... </div>

<button b:role="ok">OK</button>

<button b:role="cancel">Отмена</button>

</div>
new Node({

template: ...,

role: "popup"

});
65
<div role-marker="popup">

<div> ... </div>

<button role-marker="popup/ok">OK</button>

<button role-marker="popup/cancel">Отмена</button>

</div>
66
Создадим tracking-map и укажем
за чем необходимо следить
67
{

"popup/ok": {

"click": {

...

}

},
"popup/cancel": {

"click": {

...

}

}

}
map.json
68
{

"popup/ok": {

"click": [

...

]

},
"popup/cancel": {

"click": [

...

]

}

}
map.json
69
Соединяем воедино
70
tracker.loadMap(require('./map.json'));

tracker.attach(function(info) {
// Google Analytics

ga(info.data);

});
71
tracker.loadMap(require('./map.json'));

tracker.attach(function(info) {
// Google Analytics

ga(info.data);

});
72
tracker.loadMap(require('./map.json'));

tracker.attach(function(info) {
// Google Analytics

ga(info.data);

});
73
‣ Компоненты
‣ Источники данных
‣ Локализация
‣ Трекинг событий
‣ Инструменты разработки
‣ Заключение
74
basis.js - это удобные
инструменты разработки
75
Граф зависимостей - простое приложение
76
Граф зависимостей - сложное приложение
77
‣ выбраны услуги
‣ достаточно средств
‣ достаточно прав
78
Почему кнопка неактивна?
79
80
Более подробно в докладе
Романа Дворнова
http://bit.ly/2fr9vXO
81
‣ Прошлый опыт
‣ Компоненты
‣ Источники данных
‣ Локализация
‣ Трекинг событий
‣ Инструменты разработки
‣ Заключение
82
И все таки…
Почему мне нужно
использовать basis.js?
83
basis.js уже сейчас активно
используется в production
84
Попробуйте basis.js и сделайте
свои выводы
85
Как попробовать?
86
‣ npm i -g basisjs-tools
basis create app
basis server
87
‣ npm i -g basisjs-tools
‣ basis create app
basis server
88
‣ npm i -g basisjs-tools
‣ basis create app
‣ basis server
89
90
Отлично!
А минусы тоже есть?
91
‣ Документация
‣ Есть что улучшать
‣ Сообщество (есть gitter)
92
Спасибо за внимание!
93

More Related Content

PDF
JavaScript Базовый. Занятие 07.
PDF
CSS глазами машин
PDF
Быстро о быстром
PDF
JavaScript Базовый. Занятие 08.
PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
PDF
Basis.js – «под капотом»
PDF
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
PDF
basis.js - почему я не бросил разрабатывать свой фреймворк
JavaScript Базовый. Занятие 07.
CSS глазами машин
Быстро о быстром
JavaScript Базовый. Занятие 08.
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Basis.js – «под капотом»
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
basis.js - почему я не бросил разрабатывать свой фреймворк

What's hot (19)

PDF
DOM-шаблонизаторы – не только "быстро"
PDF
Как построить DOM
PDF
Svyatoslav Login "360 View of XSS"
PDF
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2
PDF
Не бойся, это всего лишь данные... просто их много
PPT
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
PDF
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
PDF
Kranonit s16 (python). dmitry furzenko
PDF
Баба Яга против!
PDF
Компонентный подход: скучно, неинтересно, бесперспективно
PDF
МРТ для данных, Frontend Conf 2016
PPTX
Web осень 2013 лекция 4
PPTX
Основы MongoDB + NodeJS
PDF
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
PPT
инструкция по оптимизации сайтов на Drupal херени даниэл
PPTX
Основы JS
PDF
Олег Мохов: Модель Отображения. Браузеры
PPTX
Web осень 2013 лекция 8
DOM-шаблонизаторы – не только "быстро"
Как построить DOM
Svyatoslav Login "360 View of XSS"
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2
Не бойся, это всего лишь данные... просто их много
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Kranonit s16 (python). dmitry furzenko
Баба Яга против!
Компонентный подход: скучно, неинтересно, бесперспективно
МРТ для данных, Frontend Conf 2016
Web осень 2013 лекция 4
Основы MongoDB + NodeJS
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
инструкция по оптимизации сайтов на Drupal херени даниэл
Основы JS
Олег Мохов: Модель Отображения. Браузеры
Web осень 2013 лекция 8
Ad

Viewers also liked (17)

PDF
3.2検索例題解答例2016
PDF
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
PPTX
20161008 MAPワークショップ事前学習 配布版
PPTX
5 srdtaws quality_assessment実習
PPTX
3. other his reviewers
PPTX
20160409午後チーム関西background question 配布版
PPTX
3. 2016 other md vendors
PDF
GRADE system: Making recommendation (2014/6/14)
PPTX
適応外使用について
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
PDF
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
PDF
Apache Storm Tutorial
PDF
Devoxx Morocco 2016 - Microservices with Kafka
PDF
Customer As Strategy
PDF
診療ガイドラインとは:EBMの3原則より概念を理解する 6枚
PPTX
7. Rating MD raters
PPTX
20161008MAP事前学習
3.2検索例題解答例2016
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
20161008 MAPワークショップ事前学習 配布版
5 srdtaws quality_assessment実習
3. other his reviewers
20160409午後チーム関西background question 配布版
3. 2016 other md vendors
GRADE system: Making recommendation (2014/6/14)
適応外使用について
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Apache Storm Tutorial
Devoxx Morocco 2016 - Microservices with Kafka
Customer As Strategy
診療ガイドラインとは:EBMの3原則より概念を理解する 6枚
7. Rating MD raters
20161008MAP事前学習
Ad

Similar to Basis.js - Production Ready SPA Framework (20)

PDF
2014 Jeeconf - Geb Spock
PDF
Доставка данных в реальном времени.
PDF
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
PDF
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
PDF
Эволюционный дизайн. Joker Students Day 2016
PDF
Grails & Groovy
PDF
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
PDF
Тестирование серверной конфигурации
PPTX
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
PDF
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
PDF
Сергей Константинов — Что интересного готовит нам W3C
PDF
Jbreak 2016: Твой личный Spring Boot Starter
PPTX
Problems of Automated Generation of Exploits on the Basis of Source Code
PDF
Лекция 4 Client-side
PPTX
MongoDB в продакшен - миф или реальность?
PDF
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
PDF
Cовременный станок верстальщика
PPTX
JavaScript: хороший тон клиентской разработки
PDF
Optimizaciya vremeni zagruzki_azat_razetdinov
PDF
Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"
2014 Jeeconf - Geb Spock
Доставка данных в реальном времени.
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
Эволюционный дизайн. Joker Students Day 2016
Grails & Groovy
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Тестирование серверной конфигурации
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
Сергей Константинов — Что интересного готовит нам W3C
Jbreak 2016: Твой личный Spring Boot Starter
Problems of Automated Generation of Exploits on the Basis of Source Code
Лекция 4 Client-side
MongoDB в продакшен - миф или реальность?
Евгений Батовский, Николай Птущук "Современный станок верстальщика"
Cовременный станок верстальщика
JavaScript: хороший тон клиентской разработки
Optimizaciya vremeni zagruzki_azat_razetdinov
Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"

More from MoscowJS (20)

PDF
Александр Русаков - TypeScript 2 in action
PDF
Виктор Розаев - Как не сломать обратную совместимость в Public API
PDF
Favicon на стероидах
PDF
E2E-тестирование мобильных приложений
PDF
Reliable DOM testing with browser-monkey
PDF
Контекст в React, Николай Надоричев, MoscowJS 31
PDF
Верстка Canvas, Алексей Охрименко, MoscowJS 31
PDF
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
PDF
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
PDF
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
PDF
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
PDF
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
PDF
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
PDF
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
PDF
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
PDF
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
PDF
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
PDF
"Доклад не про React", Антон Виноградов, MoscowJS 27
PDF
"Web Audio Api", Анатолий Найда, MoscowJS 27
PDF
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
Александр Русаков - TypeScript 2 in action
Виктор Розаев - Как не сломать обратную совместимость в Public API
Favicon на стероидах
E2E-тестирование мобильных приложений
Reliable DOM testing with browser-monkey
Контекст в React, Николай Надоричев, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Web Audio Api", Анатолий Найда, MoscowJS 27
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25

Basis.js - Production Ready SPA Framework