Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Типичный стек технологий для использования с node.js Сергей Широков, Jensen Technologies, 2011
Модули <ul><ul><li>Модулей много </li></ul></ul><ul><ul><li>Списки модулей есть, статистики использования — нет </li></ul>...
Компоненты стека <ul><ul><li>Фронтенд </li></ul></ul><ul><ul><li>Поддержка и мониторинг процессов </li></ul></ul><ul><ul><...
Фронтенд
Использование фронтендов <ul><ul><li>Nginx — отличный фронтенд </li></ul></ul><ul><ul><li>Единственный минус — не работает...
Поддержка и мониторинг
Чем пользуются <ul><ul><li>nodemon </li></ul></ul><ul><ul><li>forever (Nodejutsu) </li></ul></ul><ul><ul><li>haibu </li></...
Управление выполнением
Упорядочивание кода Step(    function readId() {      fs.readFile(__filename, this);    },    function getItem(err, id) { ...
Step и async <ul><ul><li>Step — библиотека от Tim Caswell, в разработке больше года, 316 watchers </li></ul></ul><ul><ul><...
Использование Step Step(    function readFirst() {      fs.readFile(filename, this);    },    function readSecond(err, nam...
Произвольное  число задач Step(    function  readDir () {      fs.readdir(__dirname, this);    },    function  readFiles (...
Использование async async.map(['file1','file2','file3'], fs.readFile, function(err, results){      // results is now an ar...
Другие возможности async <ul><ul><li>Фильтры,  reduce </li></ul></ul><ul><ul><li>Асинхронные циклы ( whilst ,  until ) </l...
Фреймворк
Connect — структура <ul><ul><li>Функционал добавляется с помощью middleware </li></ul></ul><ul><ul><li>Запрос и ответ прох...
Доступные middleware <ul><ul><li>router  — позволяет назначать функции определенным URL </li></ul></ul><ul><ul><li>vhost  ...
Express <ul><ul><li>Надстройка над Connect </li></ul></ul><ul><ul><li>View и redirection helpers </li></ul></ul><ul><ul><l...
Шаблонизатор
Статистика использования
Использование Jade <ul><ul><li>Основан на HAML </li></ul></ul><ul><ul><li>Гибкая настройка </li></ul></ul><ul><ul><li>Логи...
Использование EJS <ul><ul><li>Embedded JavaScript </li></ul></ul><ul><ul><li>Шаблонизация в стиле PHP </li></ul></ul><ul><...
Хранилище данных
Хранилища выбираются под задачу
Что предлагают хостинги Nodester : облачный CouchDB (Iris Couch) Duostack : MySQL, MongoDB Joyent : MySQL, Redis, CouchDB,...
Другая статистика
Для чего используют node
NPM, CoffeeScript, Fibers <ul><ul><li>NPM  используют 95% разработчиков — это фактически стандарт </li></ul></ul><ul><ul><...
Использование с другими серверными технологиями
Мой стек <ul><ul><li>Фронтенд:  Nginx  (если не работаю с Websockets) </li></ul></ul><ul><ul><li>Фреймворк:  Express </li>...
Вопросы?
Upcoming SlideShare
Loading in …5
×

Типичный стек технологий для использования с Node.js

3,248 views

Published on

Published in: Technology, Business
  • Be the first to comment

Типичный стек технологий для использования с Node.js

  1. 1. Типичный стек технологий для использования с node.js Сергей Широков, Jensen Technologies, 2011
  2. 2. Модули <ul><ul><li>Модулей много </li></ul></ul><ul><ul><li>Списки модулей есть, статистики использования — нет </li></ul></ul><ul><ul><li>Люди, пытающиеся впервые написать что нибудь, видят просто список в алфавитном порядке </li></ul></ul><ul><ul><li>Кроме модулей нужны другие компоненты </li></ul></ul>
  3. 3. Компоненты стека <ul><ul><li>Фронтенд </li></ul></ul><ul><ul><li>Поддержка и мониторинг процессов </li></ul></ul><ul><ul><li>Управление выполнением (flow control) </li></ul></ul><ul><ul><li>Фреймворк </li></ul></ul><ul><ul><li>Шаблонизатор </li></ul></ul><ul><ul><li>Хранилище данных </li></ul></ul>
  4. 4. Фронтенд
  5. 5. Использование фронтендов <ul><ul><li>Nginx — отличный фронтенд </li></ul></ul><ul><ul><li>Единственный минус — не работает с WebSockets </li></ul></ul><ul><ul><li>Варианты: HAProxy, фронтенд на node либо вообще без него </li></ul></ul>
  6. 6. Поддержка и мониторинг
  7. 7. Чем пользуются <ul><ul><li>nodemon </li></ul></ul><ul><ul><li>forever (Nodejutsu) </li></ul></ul><ul><ul><li>haibu </li></ul></ul><ul><ul><li>node-autorestart </li></ul></ul><ul><ul><li>runit </li></ul></ul><ul><ul><li>init </li></ul></ul><ul><ul><li>Upstart </li></ul></ul><ul><ul><li>Monit </li></ul></ul>UNIX Node
  8. 8. Управление выполнением
  9. 9. Упорядочивание кода Step(   function readId() {     fs.readFile(__filename, this);   },   function getItem(err, id) {     if (err) throw err;     db.getFromDB(id, this);   },   function showIt(err, item) {     if (err) throw err;     console.log(item.name);   } ); fs.readFile(__filename, function(err, id) {     if (err) throw err;     db.getFromDB(id, function(err, item) {   if (err) throw err;         console.log(item.name);     }); }) До После
  10. 10. Step и async <ul><ul><li>Step — библиотека от Tim Caswell, в разработке больше года, 316 watchers </li></ul></ul><ul><ul><li>Async — библиотека от Caolan McMahon, полгода в разработке, 538 watchers </li></ul></ul>(помимо них есть node-seq, node-promise, flow-js, nimble, streamline и множество других, в том числе самописных)
  11. 11. Использование Step Step(   function readFirst() {     fs.readFile(filename, this);   },   function readSecond(err, name) {     if (err) throw err;     fs.readFile(name, this);   },   function showIt(err, text) {     if (err) throw err;     console.log(newText);   } ); Step(   function loadStuff() {     fs.readFile(file1, this.parallel());     fs.readFile(file2, this.parallel());   },   function showStuff(err, first, second) {     if (err) throw err;     console.log(first);     console.log(second);   } ) Последовательное выполнение Параллельное выполнение
  12. 12. Произвольное число задач Step(   function readDir () {     fs.readdir(__dirname, this);   },   function readFiles (err, results) {     if (err) throw err;     var group = this.group();     results.forEach(function (filename) {       if (/.js$/.test(filename)) {         fs.readFile(__dirname + &quot;/&quot; + filename, 'utf8', group());       }     });   },   function showAll (err , files) {     if (err) throw err;     console.dir(files);   } );
  13. 13. Использование async async.map(['file1','file2','file3'], fs.readFile, function(err, results){     // results is now an array of stats for each file }); Параллельное чтение Последовательное чтение async.series([     function(callback){ fs.readFile('file1', callback) },     function(callback){ fs.readFile('file2', callback) },     function(callback){ fs.readFile('file3', callback) } ], function(err, results) { // результаты });
  14. 14. Другие возможности async <ul><ul><li>Фильтры, reduce </li></ul></ul><ul><ul><li>Асинхронные циклы ( whilst , until ) </li></ul></ul><ul><ul><li>Кеширование результатов асинхронных вызовов ( memoize ) </li></ul></ul>
  15. 15. Фреймворк
  16. 16. Connect — структура <ul><ul><li>Функционал добавляется с помощью middleware </li></ul></ul><ul><ul><li>Запрос и ответ проходят через все подключенные middleware (если один не оборвёт цепь или не вернёт ответ) </li></ul></ul><ul><ul><li>Достаточно для простых сайтов / сервисов </li></ul></ul>
  17. 17. Доступные middleware <ul><ul><li>router — позволяет назначать функции определенным URL </li></ul></ul><ul><ul><li>vhost — виртуальные хосты и поддомены </li></ul></ul><ul><ul><li>static — отдача статических файлов </li></ul></ul><ul><ul><li>logger — ведение логов </li></ul></ul><ul><ul><li>session — работа с сессией </li></ul></ul><ul><ul><li>compiler — сборка CSS из SASS, JS из CoffeeScript и т.д. </li></ul></ul><ul><ul><li>connect-gzip — сжатие ответов </li></ul></ul><ul><ul><li>connect-i18n — определение языка пользователя по заголовкам </li></ul></ul>Всего больше 50 модулей
  18. 18. Express <ul><ul><li>Надстройка над Connect </li></ul></ul><ul><ul><li>View и redirection helpers </li></ul></ul><ul><ul><li>Возможность подключать шаблонизатор прямо к фреймворку </li></ul></ul><ul><ul><li>Генерация заготовки сайта из командной строки </li></ul></ul><ul><ul><li>Разные конфигурации для dev / production </li></ul></ul>
  19. 19. Шаблонизатор
  20. 20. Статистика использования
  21. 21. Использование Jade <ul><ul><li>Основан на HAML </li></ul></ul><ul><ul><li>Гибкая настройка </li></ul></ul><ul><ul><li>Логи ошибок </li></ul></ul><ul><ul><li>Версии для разных языков, в т.ч. PHP </li></ul></ul>!!! 5 html(lang=&quot;en&quot;)   head     title= pageTitle     script(type='text/javascript')       if (foo) {           bar()       }   body     h1 Jade - node template engine     #container       - if (youAreUsingJade)         p You are amazing       - else         p Get on it!
  22. 22. Использование EJS <ul><ul><li>Embedded JavaScript </li></ul></ul><ul><ul><li>Шаблонизация в стиле PHP </li></ul></ul><ul><ul><li>Логи ошибок </li></ul></ul><ul><ul><li>Фильтры </li></ul></ul><h1><?= title ?></h1> <ul> <% for(var i=0; I < supplies.length; i++) {%>     <li><%= supplies[i] %></li> <% } %> </ul> <%= img_tag('test.jpg') %>
  23. 23. Хранилище данных
  24. 24. Хранилища выбираются под задачу
  25. 25. Что предлагают хостинги Nodester : облачный CouchDB (Iris Couch) Duostack : MySQL, MongoDB Joyent : MySQL, Redis, CouchDB, MongoDB (непросто, но можно) Nodejutsu : MongoDB, Redis, CouchDB
  26. 26. Другая статистика
  27. 27. Для чего используют node
  28. 28. NPM, CoffeeScript, Fibers <ul><ul><li>NPM используют 95% разработчиков — это фактически стандарт </li></ul></ul><ul><ul><li>CoffeeScript используют более 30% </li></ul></ul><ul><ul><li>Fibers — примерно 5% </li></ul></ul>
  29. 29. Использование с другими серверными технологиями
  30. 30. Мой стек <ul><ul><li>Фронтенд:  Nginx  (если не работаю с Websockets) </li></ul></ul><ul><ul><li>Фреймворк: Express </li></ul></ul><ul><ul><li>Шаблонизатор: Mu </li></ul></ul><ul><ul><li>Поддержка: Runit  + доп. скрипты для запуска </li></ul></ul><ul><ul><li>Управление выполнением: Step </li></ul></ul><ul><li>Дополнительные скрипты для деплоя из Git и создания &quot;виртуальных хостов&quot; </li></ul>
  31. 31. Вопросы?

×