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

2,968 views
2,843 views

Published on

Published in: Technology, Business
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,968
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
15
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Типичный стек технологий для использования с 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. Вопросы?

×