5. Зачем?
Хочется:
1. Иметь одностраничное приложение
2. Не жертвовать SEO
3. Не повторяться (DRY)
4. Одну языковую среду — JavaScript
5. Экономить ресурсы сервера
6. И чтобы все это было просто
5
6. И не только мне хочется
• Rendr (AirBnb)
• Kraken (Paypal)
• Mojito (Yahoo)
• Meteor
• Derby
• Invisible
• Ezel
• ... who knows?
6
14. Service-Module-Placeholer
• Service — RESTful API про данные
(node, Scala, Erlang и что угодно)
• Module — Подготовка данных для шаблона и обработка событий
• Placeholder — Шаблон
14
15. Почему не MVC?
• Нет обработки и хранения данных как в Model
• Все обрабатывается и хранится на удаленном Service
• Placeholder не привязан к Model как View
• Placeholder привязан к Module
• Module инициатор обновления Placeholder`ов, а не Model
• Отслеживается состояние Module, а не Model
15
17. Потоковый рендеринг с бэк-енда
• Нет "белого экрана"
• Браузер не простаивает
• Экономим память
17
19. Параллельный рендеринг на фронт-енде
• Когда меняется состояние модуля
• Все запросы к RESTful API параллельны
• Все очень быстро
19
29. Auto camelCase
Если шаблон называется some-cool-placeholder
ModuleConstructor.prototype.renderSomeCoolPlaceholer =
function () {
// ...
};
01.
02.
03.
04.
И так для всех методов
29
30. Promises
Можно адаптировать колбэки
return new Promise(function (fulfill, reject) {
fulfill(result); // when ready
// or
reject(error); // if error
01.
02.
03.
04.
05.
});
30
35. Благодаря чему все это есть?
• Идея потокового рендеринга взята с 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
36. Где узнать больше?
github.com/catberry/catberry
twitter.com/catberryjs
runnable.com/catberry
01.
02.
$ npm -g install catberry-cli
$ catberry init example
36