SlideShare a Scribd company logo
Фреймворк Slot
Good Parts
Александр Бирюков, Руководитель группы разработки ПО, 2GIS
Александр Бирюков
Руководитель группы разработки ПО
Организатор FrontEnd-секции
Люблю JavaScript
2
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
JavaScript-фреймворк,
позволяющий быстро и просто создавать
модульные изоморфные приложения.
Фреймворк Slot, Good Parts, Александр Бирюков
Изоморфность
• isomorphic.net
• Изоморфный JavaScript — будущее веб-приложений
• Изоморфные JavaScript-приложения с Catberry.js
7
Фреймворк Slot, Good Parts, Александр Бирюков
App
Жизненный цикл при запуске
10
App
require 'slot/env' 'slot/app' 'slot/app/clientApp'
module.exports = function() {
var Application = env.isServer ? serverApp : clientApp;
var app = new Application();
app.on('initStart', function() { ... }
app.on('initEnd', function() { ... }
return app;
}
01.
02.
03.
04.
05.
06.
07.
08.
09.
11
ServerApp
var createApp = require('./app')();
app.init(initData, function(err, mainModule) {
var html = mainModule.render();
response.send(html);
});
01.
02.
03.
04.
05.
06.
12
ClientApp
var createApp = require('./app')();
app.init(initData, function(err) {
// Рендерить не надо, т.к. уже есть html
app.bind();
});
01.
02.03.
04.
05.
06.
13
JavaScript-фреймворк,
позволяющий быстро и просто создавать
модульные изоморфные приложения.
Module
Фреймворк Slot, Good Parts, Александр Бирюков
Модули
• Организуются в определённую структуру
• Общаются по строгим правилам
• Имеют визуальное представление
17
Дерево модулей
18
Строгое общение
19
vs
Визуальное представление
21
Интерфейс модуля
var module = {
init: function(data, callback) {...}, // Изоморфный
clientInit: function() {...},
...
};
01.
02.
03.
04.
05.
22
Интерфейс модуля
var module = {
...
viewContext: function() {}, // Изоморфный
render: function(data) {...},
bind: function() {...},
...
};
01.
02.
03.
04.
05.
06.
07.
23
Интерфейс модуля
var module = {
...
elements: {
remove: {
click: function(e) {...},
//submit: function(e) {...}
}
}
...
};
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
24
Интерфейс модуля
var module = {
...
dispatcher: {
'fromModule:action': function(data) {...},
},
interface: {
doSomething: function(data) {...},
}
};
01.
02.
03.
04.
05.
06.
07.
08.
09.
25
Slot = Sandbox
Фреймворк Slot, Good Parts, Александр Бирюков
Slot
module.exports = function(slot) {
var module = {
// Код модуля
}
return module;
};
01.
02.
03.
04.
05.
06.
28
Slot
slot.init({
type: 'article',
data: {
author: 'Axel Rauschmayer',
content: 'Lorem ipsum ...'
}
});
01.
02.
03.
04.
05.
06.
07.
29
Slot
// Будет вызван 'methodName' в дочернем модуле,
// найденном по 'moduleSelector'
slot.broadcast('<moduleSelector>:methodName', msg)
// Будет обработан 'someAction' в dispatcher модуля-родителя
slot.notify('someAction'[, data ...])
slot.rerender()
01.
02.
03.
04.
05.
06.
30
JavaScript-фреймворк,
позволяющий быстро и просто создавать
модульные изоморфные приложения.
AppState
Фреймворк Slot, Good Parts, Александр Бирюков
State
State = {
zoom: 12,
lon: 82.73,
lat: 55.03,
search: 'Пиво',
...
};
01.
02.
03.
04.
05.
06.
07.
34
State
35
State
36
State
• Пользовательское действие
• Переходы по истории в браузере
• переход по прямой ссылке
37
State
38
State to URL
AppState.getShareState(State) // {Object}
UriResolver.resolve(shareState) // {String) Url
// AppState/config.js
var urls = {
'search/:query': inArray(‘panels’),
'zoom/:zoomLevel': inject
};
01.
02.
03.
04.
05.
06.
07.
08.
39
URL to State
var p = UriPattern('search/:query');
p.match('search/пиво');
// {slug: 'search', params: {query: 'пиво'}}
'zoom/:level': inject,
// {zoom: {level: 11}}
‘search/:query’: inArray(‘panels’)
// {panels: [ { type: 'search', query: 'пиво'} ]}
01.
02.
03.
04.
05.
06.
07.
08.
40
URL → State + Изоморфность =
JavaScript-фреймворк,
позволяющий быстро и просто создавать
модульные изоморфные приложения.
Быстрый старт
Установите глобально gulp и slot:
$ npm install -g gulp
$ npm install -g slot
Создайте директорию для приложения:
$ mkdir myapp && cd myapp
01.
02.
03.
01.
02.
43
Быстрый старт
Разверните базовую структуру приложения:
$ slot init
$ npm install
Соберите и запустите приложение:
$ gulp dev
Приложение доступно по адресу: http://localhost:3000
01.
02.
03.
01.
02.
44
TodoMVC
Подробнее о фреймворке
• 2gis.github.io/slot
• Концепция
• Быстрый обзор
• Документация по CLI
46
a.biryukov@2gis.ru
@illbullet
https://github.com/2gis/slot
Спасибо! Вопросы?
Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков

More Related Content

PDF
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
PDF
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
PDF
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PPT
Selenium 2.0: обзор новых возможностей
PDF
Тестируй это / Виктор Русакович (GP Solutions)
PDF
Системы автоматизированной сборки (Lecture 05 – gradle)
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Selenium 2.0: обзор новых возможностей
Тестируй это / Виктор Русакович (GP Solutions)
Системы автоматизированной сборки (Lecture 05 – gradle)

What's hot (18)

PDF
Введение в Android-разработку (Lecture 06 – basics)
PPTX
Особенности разработки API / Всеволод Шмыров (Яндекс)
PDF
Лучший frontend-фреймворк, и почему вы его не хотите
PDF
#MBLTdev: Опыт использования MVVM в реальных проектах
PPT
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
PPT
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
PDF
TК°Conf. Stylelint — как и зачем линтить CSS. Андрей Ситник.
PPT
Top 10 problems supporting Magento customers
PDF
Изоморфные Java script приложения с catberry.js
PDF
Пользователь точно оценит! Повышение производительности мобильных приложений ...
PPT
Средства разработки web приложений (Web frameworks)
PPT
Отладка и профилирование JavaScript/Ajax
PDF
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
PPTX
Go Template Toolkit, Сергей Свистунов, Lazada
PDF
Профилирование Go приложений, Стас Макаров, 220 Вольт
PDF
Превышаем скоростные лимиты с Angular 2
PDF
Как я написала платформу, взаимодействующую более чем с 15 странами по всему ...
PPTX
Опыт работы с фреймворком ASP.NET MVC
Введение в Android-разработку (Lecture 06 – basics)
Особенности разработки API / Всеволод Шмыров (Яндекс)
Лучший frontend-фреймворк, и почему вы его не хотите
#MBLTdev: Опыт использования MVVM в реальных проектах
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
TК°Conf. Stylelint — как и зачем линтить CSS. Андрей Ситник.
Top 10 problems supporting Magento customers
Изоморфные Java script приложения с catberry.js
Пользователь точно оценит! Повышение производительности мобильных приложений ...
Средства разработки web приложений (Web frameworks)
Отладка и профилирование JavaScript/Ajax
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Go Template Toolkit, Сергей Свистунов, Lazada
Профилирование Go приложений, Стас Макаров, 220 Вольт
Превышаем скоростные лимиты с Angular 2
Как я написала платформу, взаимодействующую более чем с 15 странами по всему ...
Опыт работы с фреймворком ASP.NET MVC
Ad

Viewers also liked (20)

PDF
Dribbble Meetup Odessa
PDF
Bookmate для издателей
PDF
Книги в отрытках
PDF
Александр Щепановский «Почему каждому языку нужен свой _»
PDF
App store iap. short comments
PDF
«Хоба-хоба и в продакшн», Женя Пономарёв
PDF
«Я спросил у сервера...», Илья Пастушков
PDF
Распределенные приложения и Azure Service Bus
PDF
Cоздаем пробки или тюнинг postgresql для расчетных задач
PDF
«Новый 2ГИС Online» — Влад Семенов, 2ГИС
PDF
Inversion of Control в деталях, Дмитрий Кожевников
PDF
Олег Годовых «Страх и ненависть в Event Bus»
PDF
«Процесс создания продукта», Максим Берёзкин
PDF
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
PDF
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
PDF
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
PDF
карты. рисуем от руки или раскладываем в колоды
PDF
«Открытая веб картография», Илья Таратухин
PDF
«Вывод продукта на новых территориях», Елизавета Алексеенко
PDF
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Dribbble Meetup Odessa
Bookmate для издателей
Книги в отрытках
Александр Щепановский «Почему каждому языку нужен свой _»
App store iap. short comments
«Хоба-хоба и в продакшн», Женя Пономарёв
«Я спросил у сервера...», Илья Пастушков
Распределенные приложения и Azure Service Bus
Cоздаем пробки или тюнинг postgresql для расчетных задач
«Новый 2ГИС Online» — Влад Семенов, 2ГИС
Inversion of Control в деталях, Дмитрий Кожевников
Олег Годовых «Страх и ненависть в Event Bus»
«Процесс создания продукта», Максим Берёзкин
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
карты. рисуем от руки или раскладываем в колоды
«Открытая веб картография», Илья Таратухин
«Вывод продукта на новых территориях», Елизавета Алексеенко
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Ad

Similar to Фреймворк Slot, Good Parts, Александр Бирюков (20)

PDF
Frontend весна 2014 лекция 1
PDF
Опыт разработки эффективного SPA
PPTX
Java осень 2012 лекция 5
PPTX
JavaScript-модули "из прошлого в будущее"
PDF
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
PPTX
iOS and Android Mobile Test Automation
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
PDF
Mobile automation uamobile
PDF
Превышаем скоросные лимиты с Angular 2
PDF
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
PDF
FrontTalks: Илья Пухальский (EPAM Systems), «Веб-приложения будущего»
PDF
Devcamp nodejs-2010
PDF
Автоматизация UI тестирования под Windows и Windows Phone
PDF
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
PDF
Инструментируй это
PPTX
Антон Валюх - Использование паттерна Mvvm в android
PPT
Всеволод Шмыров, Яндекс
PPTX
Аспектно-ориентированное программирование (АОП) на примере PostSharp
PDF
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Frontend весна 2014 лекция 1
Опыт разработки эффективного SPA
Java осень 2012 лекция 5
JavaScript-модули "из прошлого в будущее"
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
Node.js введение в технологию, КПИ #ITmeetingKPI
iOS and Android Mobile Test Automation
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Mobile automation uamobile
Превышаем скоросные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
FrontTalks: Илья Пухальский (EPAM Systems), «Веб-приложения будущего»
Devcamp nodejs-2010
Автоматизация UI тестирования под Windows и Windows Phone
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
Инструментируй это
Антон Валюх - Использование паттерна Mvvm в android
Всеволод Шмыров, Яндекс
Аспектно-ориентированное программирование (АОП) на примере PostSharp
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь

More from DevDay (16)

PDF
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
PDF
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
PDF
Devops-практики в разработке решений для бизнеса, Максим Пашук
PDF
«Велогосипед», Данил Ильиных
PDF
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
PDF
Лабиринт на Arduino, Вадим Ипполитов
PDF
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
PDF
«Тестируем веб приложения», Павел Сташевский
PDF
Матвей Мальков «Ещё один поиск контактов на Android»
PDF
Frontend
PDF
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
PDF
Роман Акинфеев «Разработка RESTful API with all bells and whistles»
PDF
Алексей Романчук «Реактивное программирование»
PDF
Артём Кудзев «Делайте на работе то, что мотивирует»
PDF
Тимофей Чаптыков «Верстальщик должен быть ленивый»
PDF
«Автоматизация тестирования» — 2ГИС Павел Сташевский, 2ГИС
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
Devops-практики в разработке решений для бизнеса, Максим Пашук
«Велогосипед», Данил Ильиных
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Лабиринт на Arduino, Вадим Ипполитов
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Тестируем веб приложения», Павел Сташевский
Матвей Мальков «Ещё один поиск контактов на Android»
Frontend
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Роман Акинфеев «Разработка RESTful API with all bells and whistles»
Алексей Романчук «Реактивное программирование»
Артём Кудзев «Делайте на работе то, что мотивирует»
Тимофей Чаптыков «Верстальщик должен быть ленивый»
«Автоматизация тестирования» — 2ГИС Павел Сташевский, 2ГИС

Фреймворк Slot, Good Parts, Александр Бирюков