SlideShare a Scribd company logo
Изоморфные JavaScript-приложения 
pragmadash Денис Речкунов 
node.js-разработчик 
с Catberry.js
Изоморфные приложения?
Одностраничный фронт-енд & SEO бэк-енд
Один код и 
одно поведение
Зачем? 
Хочется: 
1. Иметь одностраничное приложение 
2. Не жертвовать SEO 
3. Не повторяться (DRY) 
4. Одну языковую среду — JavaScript 
5. Экономить ресурсы сервера 
6. И чтобы все это было просто 
5
И не только мне хочется 
• Rendr (AirBnb) 
• Kraken (Paypal) 
• Mojito (Yahoo) 
• Meteor 
• Derby 
• Invisible 
• Ezel 
• ... who knows? 
6
Почему они 
не так хороши?
Используют фронт-енд на сервере 
• Rendr, Ezel — Backbone 
• Mojito — YUI 
• MEAN — Angular 
8
Привязаны к одной БД 
Например, MongoDB: 
• Rendr 
• Meteor 
• Derby + Redis 
9
Навязывают сложный real-time 
• Meteor 
• Derby 
10
А хочется-то 
просто сайт
Изоморфные Java script приложения с catberry.js
Catberry.js
Service-Module-Placeholer 
• Service — RESTful API про данные 
(node, Scala, Erlang и что угодно) 
• Module — Подготовка данных для шаблона и обработка событий 
• Placeholder — Шаблон 
14
Почему не MVC? 
• Нет обработки и хранения данных как в Model 
• Все обрабатывается и хранится на удаленном Service 
• Placeholder не привязан к Model как View 
• Placeholder привязан к Module 
• Module инициатор обновления Placeholder`ов, а не Model 
• Отслеживается состояние Module, а не Model 
15
Изоморфные Java script приложения с catberry.js
Потоковый рендеринг с бэк-енда 
• Нет "белого экрана" 
• Браузер не простаивает 
• Экономим память 
17
Изоморфные Java script приложения с catberry.js
Параллельный рендеринг на фронт-енде 
• Когда меняется состояние модуля 
• Все запросы к RESTful API параллельны 
• Все очень быстро 
19
Настоящая изоморфность 
• URL path 
• Очистка URL hash 
• User Agent 
• Referrer 
• Чтение/редактирование Cookie 
• Redirect 
• Universal HTTP(S) request 
• Rendered cache 
20
Module API
Service Locator 
01. 
02. 
03. 
04. 
locator.register(‘uhr’, UHR); 
locator.registerInstance('uhr', new UHR()); 
locator.resolve(‘uhr’, UHR); 
locator.resolveInstance(SomeModuleDependsOnUHR); 
22
Dependency Injection 
01. 
02. 
03. 
04. 
function ModuleConstructor ($uhr, someConfigSection) { 
// use injected $uhr 
// and event config sections 
} 
23
Render method 
01. 
02. 
03. 
04. 
ModuleConstructor.prototype.renderSome = function () { 
// get data from somewhere 
return {some: data}; // 
}; 
24
After method 
ModuleConstructor.prototype.afterRenderSome = 
function (dataContext) { 
// do everything with rendered Placeholder 
}; 
01. 
02. 
03. 
04. 
25
Handle method 
01. 
02. 
03. 
04. 
05. 
06. 
07. 
ModuleConstructor.prototype.handleSome = function (event) { 
// do something 
// event.args 
// event.element 
// event.isEnding 
// event.isHashChanging 
}; 
26
Submit method 
01. 
02. 
03. 
04. 
05. 
ModuleConstructor.prototype.submitSome = function (event) { 
// handle form submit 
// event.values 
// event.element 
}; 
27
Конвенции именования
Auto camelCase 
Если шаблон называется some-cool-placeholder 
ModuleConstructor.prototype.renderSomeCoolPlaceholer = 
function () { 
// ... 
}; 
01. 
02. 
03. 
04. 
И так для всех методов 
29
Promises 
Можно адаптировать колбэки 
return new Promise(function (fulfill, reject) { 
fulfill(result); // when ready 
// or 
reject(error); // if error 
01. 
02. 
03. 
04. 
05. 
}); 
30
Promises 
Чейнинг асинхронного кода 
promise 
.then(function (result) { 
// return Promise 
}) 
.then(function (result) { 
// return result 
}); 
01. 
02. 
03. 
04. 
05. 
06. 
07. 
31
Promises 
Обработка ошибок в одном месте 
promise 
// many .then 
.then(null, function (error) { 
// handle error 
}); 
01. 
02. 
03. 
04. 
05. 
32
А где-то уже используется? 
konfettin.ru 
flamp.ru (скоро) 
catberry.org (скоро) 
33
Open Source 
— это круто!
Благодаря чему все это есть? 
• Идея потокового рендеринга взята с trumpet 
github.com/substack/node-trumpet 
• Серверный код работает в браузере благодаря browserify 
github.com/substack/node-browserify 
• Используется форк форка шаблонизатора Dust 
github.com/catberry/catberry-dust 
• И все это подключается к express/connect 
github.com/strongloop/express / github.com/senchalabs/connect 
35
Где узнать больше? 
github.com/catberry/catberry 
twitter.com/catberryjs 
runnable.com/catberry 
01. 
02. 
$ npm -g install catberry-cli 
$ catberry init example 
36
Вопросы?
Ad

Recommended

PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
 
PDF
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
JSib
 
PDF
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
MoscowJS
 
PDF
Суперсилы Chrome developer tools
2ГИС Технологии
 
PDF
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
MoscowJS
 
PPT
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits
 
PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
 
PDF
Devcamp nodejs-2010
Antono Vasiljev
 
PDF
Performance optimisation in javascript
Артем Захарченко
 
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Yandex
 
PPT
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Iosif Itkin
 
PPTX
Опыт работы с фреймворком ASP.NET MVC
Даниил Силантьев
 
PPTX
Олексій Андрусевич “Прискорення робочого процесу в Adobe Photoshop за допомог...
Lviv Startup Club
 
ODP
MongoDB: Приложение по поиску точек на карте
Gleb Lebedev
 
PDF
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Омские ИТ-субботники
 
PPTX
JavaScript: прошлое, настоящее и будущее.
FDConf
 
PDF
Фреймворк Slot, Good Parts, Александр Бирюков
DevDay
 
PPTX
Reactive UI на C#
Nikolay Yasinskiy
 
PDF
nginx internals
redivy
 
ODP
Smirnov twisted-python
Andrey Smirnov
 
PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
PDF
Mobile Fest#spb 2012
dmalykhanov
 
PPTX
История развития и применения CMS: Drupal и другие
lugnsk
 
PDF
Открытая веб картография
lugnsk
 
PPTX
Creating Open Source Projects
Alexei Yuzhakov
 
PDF
OpenSource инструменты. Тестируем Web-приложения
lugnsk
 
PDF
Opensource на .NET
lugnsk
 
PDF
Static Sites Generation
Alexei Yuzhakov
 
PDF
Изоморфный JavaScript — будущее уже здесь
CodeFest
 

More Related Content

What's hot (15)

PDF
Performance optimisation in javascript
Артем Захарченко
 
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Yandex
 
PPT
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Iosif Itkin
 
PPTX
Опыт работы с фреймворком ASP.NET MVC
Даниил Силантьев
 
PPTX
Олексій Андрусевич “Прискорення робочого процесу в Adobe Photoshop за допомог...
Lviv Startup Club
 
ODP
MongoDB: Приложение по поиску точек на карте
Gleb Lebedev
 
PDF
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Омские ИТ-субботники
 
PPTX
JavaScript: прошлое, настоящее и будущее.
FDConf
 
PDF
Фреймворк Slot, Good Parts, Александр Бирюков
DevDay
 
PPTX
Reactive UI на C#
Nikolay Yasinskiy
 
PDF
nginx internals
redivy
 
ODP
Smirnov twisted-python
Andrey Smirnov
 
PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
PDF
Mobile Fest#spb 2012
dmalykhanov
 
Performance optimisation in javascript
Артем Захарченко
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Yandex
 
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Iosif Itkin
 
Опыт работы с фреймворком ASP.NET MVC
Даниил Силантьев
 
Олексій Андрусевич “Прискорення робочого процесу в Adobe Photoshop за допомог...
Lviv Startup Club
 
MongoDB: Приложение по поиску точек на карте
Gleb Lebedev
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Омские ИТ-субботники
 
JavaScript: прошлое, настоящее и будущее.
FDConf
 
Фреймворк Slot, Good Parts, Александр Бирюков
DevDay
 
Reactive UI на C#
Nikolay Yasinskiy
 
nginx internals
redivy
 
Smirnov twisted-python
Andrey Smirnov
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
Mobile Fest#spb 2012
dmalykhanov
 

Viewers also liked (6)

PPTX
История развития и применения CMS: Drupal и другие
lugnsk
 
PDF
Открытая веб картография
lugnsk
 
PPTX
Creating Open Source Projects
Alexei Yuzhakov
 
PDF
OpenSource инструменты. Тестируем Web-приложения
lugnsk
 
PDF
Opensource на .NET
lugnsk
 
PDF
Static Sites Generation
Alexei Yuzhakov
 
История развития и применения CMS: Drupal и другие
lugnsk
 
Открытая веб картография
lugnsk
 
Creating Open Source Projects
Alexei Yuzhakov
 
OpenSource инструменты. Тестируем Web-приложения
lugnsk
 
Opensource на .NET
lugnsk
 
Static Sites Generation
Alexei Yuzhakov
 
Ad

Similar to Изоморфные Java script приложения с catberry.js (20)

PDF
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Yandex
 
PDF
Frontend весна 2014 лекция 1
Technopark
 
PPT
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Arseny Zarechnev
 
PDF
YaC 2013 Notes
Anton Ignatov
 
PPTX
Meet Magento Belarus - Alexander Kaigorodov
Amasty
 
PDF
Павел Юрийчук - Разработка приложений под мобильные браузеры
UA Mobile
 
PDF
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Arseny Zarechnev
 
PDF
Meet Magento Belarus 2015: Denis Bosak
Amasty
 
PDF
Фронтенд в Яндексе
Yandex
 
PDF
Фронтенд в Яндексе
Yandex
 
PDF
Изоморфные react-приложения
Denis Izmaylov
 
PPTX
Full Stack разработка на JavaScript
Олег Шерыхалин
 
PDF
Making Scalable JavaScript Application
Mikhail Davydov
 
PPT
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
PDF
webpack: 7 бед - один ответ
Denis Izmaylov
 
PDF
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
PPTX
Redux и изоморфные приложения
John Wezel
 
PDF
Backbone js
Eugene Solovyov
 
PPTX
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Timur Shemsedinov
 
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Yandex
 
Frontend весна 2014 лекция 1
Technopark
 
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Arseny Zarechnev
 
YaC 2013 Notes
Anton Ignatov
 
Meet Magento Belarus - Alexander Kaigorodov
Amasty
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
UA Mobile
 
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Arseny Zarechnev
 
Meet Magento Belarus 2015: Denis Bosak
Amasty
 
Фронтенд в Яндексе
Yandex
 
Фронтенд в Яндексе
Yandex
 
Изоморфные react-приложения
Denis Izmaylov
 
Full Stack разработка на JavaScript
Олег Шерыхалин
 
Making Scalable JavaScript Application
Mikhail Davydov
 
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
webpack: 7 бед - один ответ
Denis Izmaylov
 
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
Redux и изоморфные приложения
John Wezel
 
Backbone js
Eugene Solovyov
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Timur Shemsedinov
 
Ad

Изоморфные Java script приложения с catberry.js