93
basis.js production ready framework 1

Basis.js - Production Ready Framework

  • Upload
    -

  • View
    194

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Basis.js - Production Ready Framework

basis.jsproduction ready framework

1

Page 2: Basis.js - Production Ready Framework

Обо мне

@smelukov

Работаю в Avito Делаю большое SPA

Преподаю JS Учу создавать веб-приложения

Люблю JS и жену Но больше жену

Популяризирую basis.js Верю, что basis.js захватит мир

Сергей Мелюков

2

Page 3: Basis.js - Production Ready Framework

Когда я рассказываю про basis.js

‣ Зачем?! Есть же [X] ‣ basis.js - сложный, а [X] - простой

3

Page 4: Basis.js - Production Ready Framework

Возможно, я не точно доносил смысл того, что такое basis.js и это

повлекло поспешные выводы

4

Page 5: Basis.js - Production Ready Framework

Действительно ли можно просто взять любой фреймворк и сразу начать делать веб-приложения?

5

Page 6: Basis.js - Production Ready Framework

Нет! Любой фреймворк требует

изучения и опыта использования

6

Page 7: Basis.js - Production Ready Framework

Поговорим о том, какие возможности дает basis.js из

коробки

7

Page 8: Basis.js - Production Ready Framework

План‣Компоненты ‣Источники данных ‣Локализация ‣ Трекинг событий ‣Инструменты разработки ‣Заключение

8

Page 9: Basis.js - Production Ready Framework

‣Компоненты ‣Источники данных ‣Локализация ‣ Трекинг событий ‣Инструменты разработки ‣Заключение

9

Page 10: Basis.js - Production Ready Framework

basis.js - это компонентный подход

10

Page 11: Basis.js - Production Ready Framework

OK

имя

фамилия

отчество

Отмена

11

Page 12: Basis.js - Production Ready Framework

new Node({ template: ..., binding: { firstName: ..., lastName: ..., }});

12

Page 13: Basis.js - Production Ready Framework

new Node({ template: ..., binding: { firstName: ..., lastName: ... }});

13

Page 14: Basis.js - Production Ready Framework

basis.js - это шаблоны без логики

14

Page 15: Basis.js - Production Ready Framework

<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

Page 16: Basis.js - Production Ready Framework

Логика в JS, шаблон в XHTML

16

Page 17: Basis.js - Production Ready Framework

<b:style src="./person.css"/><div class="person"> <div>Имя: {firstName}</div> <div>Фамилия: {lastName}</div> </div>

17

Page 18: Basis.js - Production Ready Framework

basis.js - это изоляция стилей и модульный CSS

18

Page 19: Basis.js - Production Ready Framework

<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

Page 20: Basis.js - Production Ready Framework

‣Компоненты ‣Источники данных ‣Локализация ‣ Трекинг событий ‣Инструменты разработки ‣Заключение

20

Page 21: Basis.js - Production Ready Framework

basis.js - это гибкое взаимодействие с источниками

данных

21

Page 22: Basis.js - Production Ready Framework

Источником данных может быть объект, коллекция объектов или

другой компонент

22

Page 23: Basis.js - Production Ready Framework

new Node({ template: ..., binding: { ... }, dataSource: ... });

23

Page 24: Basis.js - Production Ready Framework

childNodes

Component

items

Dataset (коллекция)

‣ model ‣ model ‣ model ‣ model ‣ model ‣ model

component component component component component component

24

Page 25: Basis.js - Production Ready Framework

Контролировать источник данных можно при помощи состояний

25

Page 26: Basis.js - Production Ready Framework

‣ processing - в состоянии синхронизации ‣ deprecated - данные устарели ‣ ready - готов к работе ‣ error - ошибка

26

Page 27: Basis.js - Production Ready Framework

Примеры использования?

Page 28: Basis.js - Production Ready Framework

Показываем спиннер, пока загружаются данные

Page 29: Basis.js - Production Ready Framework

Обновляем устаревшие данные

Page 30: Basis.js - Production Ready Framework

basis.js - это автоматические источники данных (индексы,

фильтры, etc…)

30

Page 31: Basis.js - Production Ready Framework

31

Page 32: Basis.js - Production Ready Framework

Выбранные друзья

items

Доступные друзья

items

‣ model ‣ model ‣ model???

32

Page 33: Basis.js - Production Ready Framework

Исключим выбранных друзей из всех друзей и получим доступных

друзей

33

Page 34: Basis.js - Production Ready Framework

allFriends = new Dataset();

favoriteFriends = new Dataset();availableFriends = new Subtract({ minuend: allFriends, subtrahend: favoriteFriends});

34

Page 35: Basis.js - Production Ready Framework

allFriends = new Dataset();

favoriteFriends = new Dataset();availableFriends = new Subtract({ minuend: allFriends, subtrahend: favoriteFriends});

35

Page 36: Basis.js - Production Ready Framework

allFriends = new Dataset();

favoriteFriends = new Dataset();availableFriends = new Subtract({ minuend: allFriends, subtrahend: favoriteFriends});

36

Page 37: Basis.js - Production Ready Framework

Почему не for?

37

Page 38: Basis.js - Production Ready Framework

Придется реализовать механизм отслеживания изменений

38

Page 39: Basis.js - Production Ready Framework

Такой механизм уже встроен в наборы basis.js!

39

Page 40: Basis.js - Production Ready Framework

allFriends = new Dataset();

favoriteFriends = new Dataset();availableFriends = new Subtract({ minuend: allFriends, subtrahend: favoriteFriends});

40

Page 41: Basis.js - Production Ready Framework

А есть еще что-то, кроме Subtract?

41

Page 42: Basis.js - Production Ready Framework

42

‣ Merge - объединение коллекций ‣ Filter - фильтрация элементов коллекции ‣ Slice - срез элементов коллекции ‣ Split - деление коллекции на подмножества ‣ etc…

Page 43: Basis.js - Production Ready Framework

Для агрегации элементов коллекции используются индексы

43

Page 44: Basis.js - Production Ready Framework

44

‣ Min - минимальное значение коллекции ‣ Max - максимальное значение коллекции ‣ Avg - среднее значение коллекции ‣ Sum - сумма элементов в коллекции ‣ etc…

Page 45: Basis.js - Production Ready Framework

Манипуляция с данными, а не с DOM DOM - всего лишь отображение

45

Page 46: Basis.js - Production Ready Framework

‣Компоненты ‣Источники данных ‣Локализация ‣ Трекинг событий ‣Инструменты разработки ‣Заключение

46

Page 47: Basis.js - Production Ready Framework

basis.js - это удобные инструменты локализации

47

Page 48: Basis.js - Production Ready Framework

Словарь - это JSON-файл

48

Page 49: Basis.js - Production Ready Framework

{ "en-US": { "hello": "Hello!" }, "ru-RU": { "hello": "Привет!" }}

49

Page 50: Basis.js - Production Ready Framework

{ "en-US": { "hello": "Hello!" }, "ru-RU": { "hello": "Привет!" } }

<div> {l10n:hello}</div>

50

Page 51: Basis.js - Production Ready Framework

<div> Привет!</div>

51

Page 52: Basis.js - Production Ready Framework

В словарях можно использовать биндинги и разметку

52

Page 53: Basis.js - Production Ready Framework

new Node({ template: ... binding: { firstName: ..., lastName: ... }});

53

Page 54: Basis.js - Production Ready Framework

{ "_meta": { "type": { "hello": "markup" } }, "ru-RU": { "hello": "Привет, <b>{firstName} {lastName}</b>" }}

Page 55: Basis.js - Production Ready Framework

{ "_meta": { "type": { "hello": "markup" } }, "ru-RU": { "hello": "Привет, <b>{firstName} {lastName}</b>" }}

<div> {l10n:hello}</div>

55

Page 56: Basis.js - Production Ready Framework

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

56

Page 57: Basis.js - Production Ready Framework

Грамматическое число поддерживается на уровне словаря

57

Page 58: Basis.js - Production Ready Framework

new Node({ template: ... binding: { total: ... }});

58

Page 59: Basis.js - Production Ready Framework

{ "_meta": { "type": { "offer": "plural" } }, "ru-RU": { "offer": [ "Всего {#} объявление", "Всего {#} объявления", "Всего {#} объявлений" ] }}

59

Page 60: Basis.js - Production Ready Framework

{ "_meta": { "type": { "offer": "plural" } }, "ru-RU": { "offer": [ "Всего {#} объявление", "Всего {#} объявления", "Всего {#} объявлений" ] }}

<div> {l10n:offer.{total}} </div>

60

Page 61: Basis.js - Production Ready Framework

<div> Всего 10 объявлений</div>

61

Page 62: Basis.js - Production Ready Framework

‣Компоненты ‣Источники данных ‣Локализация ‣ Трекинг событий ‣Инструменты разработки ‣Заключение

62

Page 63: Basis.js - Production Ready Framework

basis.js - это трекинг событий

63

Page 64: Basis.js - Production Ready Framework

Разметим компоненты и шаблоны ролями

64

Page 65: Basis.js - Production Ready Framework

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

new Node({ template: ..., role: "popup"});

65

Page 66: Basis.js - Production Ready Framework

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

66

Page 67: Basis.js - Production Ready Framework

Создадим tracking-map и укажем за чем необходимо следить

67

Page 68: Basis.js - Production Ready Framework

{ "popup/ok": { "click": { ... } }, "popup/cancel": { "click": { ... } }}

map.json

68

Page 69: Basis.js - Production Ready Framework

{ "popup/ok": { "click": [ ... ] }, "popup/cancel": { "click": [ ... ] }}

map.json

69

Page 70: Basis.js - Production Ready Framework

Соединяем воедино

70

Page 71: Basis.js - Production Ready Framework

tracker.loadMap(require('./map.json'));tracker.attach(function(info) { // Google Analytics ga(info.data);});

71

Page 72: Basis.js - Production Ready Framework

tracker.loadMap(require('./map.json'));tracker.attach(function(info) { // Google Analytics ga(info.data);});

72

Page 73: Basis.js - Production Ready Framework

tracker.loadMap(require('./map.json'));tracker.attach(function(info) { // Google Analytics ga(info.data);});

73

Page 74: Basis.js - Production Ready Framework

‣Компоненты ‣Источники данных ‣Локализация ‣ Трекинг событий ‣Инструменты разработки ‣Заключение

74

Page 75: Basis.js - Production Ready Framework

basis.js - это удобные инструменты разработки

75

Page 76: Basis.js - Production Ready Framework

Граф зависимостей - простое приложение

76

Page 77: Basis.js - Production Ready Framework

Граф зависимостей - сложное приложение

77

Page 78: Basis.js - Production Ready Framework

‣ выбраны услуги ‣достаточно средств ‣достаточно прав

78

Page 79: Basis.js - Production Ready Framework

Почему кнопка неактивна?

79

Page 80: Basis.js - Production Ready Framework

80

Page 81: Basis.js - Production Ready Framework

Более подробно в докладе Романа Дворнова http://bit.ly/2fr9vXO

81

Page 82: Basis.js - Production Ready Framework

‣ Прошлый опыт ‣ Компоненты ‣ Источники данных ‣ Локализация ‣ Трекинг событий ‣ Инструменты разработки ‣ Заключение

82

Page 83: Basis.js - Production Ready Framework

И все таки… Почему мне нужно

использовать basis.js?

83

Page 84: Basis.js - Production Ready Framework

basis.js уже сейчас активно используется в production

84

Page 85: Basis.js - Production Ready Framework

Попробуйте basis.js и сделайте свои выводы

85

Page 86: Basis.js - Production Ready Framework

Как попробовать?

86

Page 87: Basis.js - Production Ready Framework

‣ npm i -g basisjs-tools basis create app basis server

87

Page 88: Basis.js - Production Ready Framework

‣ npm i -g basisjs-tools ‣ basis create app

basis server

88

Page 89: Basis.js - Production Ready Framework

‣ npm i -g basisjs-tools ‣ basis create app ‣ basis server

89

Page 90: Basis.js - Production Ready Framework

90

Page 91: Basis.js - Production Ready Framework

Отлично! А минусы тоже есть?

91

Page 92: Basis.js - Production Ready Framework

‣ Документация ‣ Есть что улучшать ‣ Сообщество (есть gitter)

92

Page 93: Basis.js - Production Ready Framework

Спасибо за внимание!

93