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

31
Типичный стек технологий для использования с node.js Сергей Широков, Jensen Technologies, 2011

description

Типичный стек технологий для использования с node.js. Сергей Широков, Jensen Technologies, 2011. Модули. Модулей много Списки модулей есть, статистики использования — нет Люди, пытающиеся впервые написать что нибудь, видят просто список в алфавитном порядке - PowerPoint PPT Presentation

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

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

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

Сергей Широков, Jensen Technologies, 2011

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

Модули

• Модулей много• Списки модулей есть, статистики использования — нет• Люди, пытающиеся впервые написать что нибудь, видят просто

список в алфавитном порядке• Кроме модулей нужны другие компоненты

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

Компоненты стека

• Фронтенд• Поддержка и мониторинг процессов• Управление выполнением (flow control)• Фреймворк• Шаблонизатор• Хранилище данных

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

Фронтенд

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

Использование фронтендов

• Nginx — отличный фронтенд• Единственный минус — не

работает с WebSockets• Варианты: HAProxy,

фронтенд на node либо вообще без него

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

Поддержка и мониторинг

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

Чем пользуются

• nodemon• forever (Nodejutsu)• haibu• node-autorestart

• runit• init• Upstart• Monit

UNIX Node

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

Управление выполнением

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

Упорядочивание кода

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);    }); })

До После

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

Step и async

• Step — библиотека от Tim Caswell, в разработке больше года, 316 watchers

• Async — библиотека от Caolan McMahon, полгода в разработке, 538 watchers

(помимо них есть node-seq, node-promise, flow-js, nimble, streamline и множество других, в том числе самописных)

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

Использование 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);  })

Последовательное выполнение Параллельное

выполнение

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

Произвольное число задач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 + "/" + filename, 'utf8', group());      }    });  },  function showAll(err , files) {    if (err) throw err;    console.dir(files);  });

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

Использование 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) {// результаты});

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

Другие возможности async

• Фильтры, reduce• Асинхронные циклы (whilst, until)• Кеширование результатов асинхронных вызовов

(memoize)

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

Фреймворк

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

Connect — структура

• Функционал добавляется с помощью middleware

• Запрос и ответ проходят через все подключенные middleware (если один не оборвёт цепь или не вернёт ответ)

• Достаточно для простых сайтов / сервисов

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

Доступные middleware

• router — позволяет назначать функции определенным URL

• vhost — виртуальные хосты и поддомены• static — отдача статических файлов• logger — ведение логов• session — работа с сессией• compiler — сборка CSS из SASS, JS из CoffeeScript и т.д.• connect-gzip — сжатие ответов• connect-i18n — определение языка пользователя по

заголовкам

Всего больше 50 модулей

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

Express

• Надстройка над Connect• View и redirection helpers• Возможность подключать

шаблонизатор прямо к фреймворку• Генерация заготовки сайта из

командной строки• Разные конфигурации для dev /

production

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

Шаблонизатор

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

Статистика использования

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

Использование Jade

• Основан на HAML• Гибкая настройка• Логи ошибок• Версии для разных языков, в

т.ч. PHP

!!! 5html(lang="en")  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!

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

Использование EJS

• Embedded JavaScript• Шаблонизация в стиле PHP• Логи ошибок• Фильтры

<h1><?= title ?></h1>

<ul><% for(var i=0; I < supplies.length; i++) {%>   <li><%= supplies[i] %></li><% } %></ul>

<%= img_tag('test.jpg') %>

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

Хранилище данных

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

Хранилища выбираются под задачу

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

Что предлагают хостинги

Nodester: облачный CouchDB (Iris Couch)

Duostack: MySQL, MongoDB

Joyent: MySQL, Redis, CouchDB, MongoDB (непросто, но можно)

Nodejutsu: MongoDB, Redis, CouchDB

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

Другая статистика

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

Для чего используют node

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

NPM, CoffeeScript, Fibers

• NPM используют 95% разработчиков — это фактически стандарт

• CoffeeScript используют более 30%• Fibers — примерно 5%

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

Использование с другимисерверными технологиями

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

Мой стек

• Фронтенд: Nginx (если не работаю с Websockets)• Фреймворк: Express• Шаблонизатор: Mu• Поддержка: Runit + доп. скрипты для запуска• Управление выполнением: Step

Дополнительные скрипты для деплоя из Git и создания "виртуальных хостов"

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

Вопросы?