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

Содержание

Слайд 2

Модули

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

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

Слайд 3

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

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

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

Слайд 4

Фронтенд

Фронтенд

Слайд 5

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

Nginx — отличный фронтенд
Единственный минус — не работает с WebSockets
Варианты: HAProxy,

Использование фронтендов Nginx — отличный фронтенд Единственный минус — не работает с
фронтенд на node либо вообще без него

Слайд 6

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

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

Слайд 7

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

nodemon
forever (Nodejutsu)
haibu
node-autorestart

runit
init
Upstart
Monit

UNIX

Node

Чем пользуются nodemon forever (Nodejutsu) haibu node-autorestart runit init Upstart Monit UNIX Node

Слайд 8

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

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

Слайд 9

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

Step(
  function readId() {
  fs.readFile(__filename, this);
  },
  function getItem(err, id) {
 

Упорядочивание кода 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

Step и async

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

Step и async Step — библиотека от Tim Caswell, в разработке больше
316 watchers
Async — библиотека от Caolan McMahon, полгода в разработке, 538 watchers

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

Слайд 11

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

Step(
  function readFirst() {
  fs.readFile(filename, this);
  },
  function readSecond(err, name) {
 

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

Произвольное число задач

Step(
  function readDir() {
  fs.readdir(__dirname, this);
  },
  function readFiles(err, results)

Произвольное число задач Step( function readDir() { fs.readdir(__dirname, this); }, function readFiles(err,
{
  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);
  }
);

Слайд 13

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

async.map(['file1','file2','file3'], fs.readFile, function(err, results){
  // results is now an array of

Использование async async.map(['file1','file2','file3'], fs.readFile, function(err, results){ // results is now an array
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

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

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

Другие возможности async Фильтры, reduce Асинхронные циклы (whilst, until) Кеширование результатов асинхронных вызовов (memoize)

Слайд 15

Фреймворк

Фреймворк

Слайд 16

Connect — структура

Функционал добавляется с помощью middleware
Запрос и ответ проходят через все

Connect — структура Функционал добавляется с помощью middleware Запрос и ответ проходят
подключенные middleware (если один не оборвёт цепь или не вернёт ответ)
Достаточно для простых сайтов / сервисов

Слайд 17

Доступные middleware

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

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

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

Слайд 18

Express

Надстройка над Connect
View и redirection helpers
Возможность подключать шаблонизатор прямо к фреймворку
Генерация заготовки

Express Надстройка над Connect View и redirection helpers Возможность подключать шаблонизатор прямо
сайта из командной строки
Разные конфигурации для dev / production

Слайд 19

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

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

Слайд 20

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

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

Слайд 21

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

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

!!!

Использование Jade Основан на HAML Гибкая настройка Логи ошибок Версии для разных
5
html(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!

Слайд 22

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

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



    <% for(var i=0; I

Использование EJS Embedded JavaScript Шаблонизация в стиле PHP Логи ошибок Фильтры
< supplies.length; i++) {%>
   
  • <%= supplies[i] %>

  • <% } %>

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

    Слайд 23

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

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

    Слайд 24

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

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

    Слайд 25

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

    Nodester: облачный CouchDB (Iris Couch)
    Duostack: MySQL, MongoDB
    Joyent: MySQL, Redis, CouchDB,

    Что предлагают хостинги Nodester: облачный CouchDB (Iris Couch) Duostack: MySQL, MongoDB Joyent:
    MongoDB (непросто, но можно)
    Nodejutsu: MongoDB, Redis, CouchDB

    Слайд 26

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

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

    Слайд 27

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

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

    Слайд 28

    NPM, CoffeeScript, Fibers

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

    NPM, CoffeeScript, Fibers NPM используют 95% разработчиков — это фактически стандарт CoffeeScript
    30%
    Fibers — примерно 5%

    Слайд 29

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

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

    Слайд 30

    Мой стек

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

    Мой стек Фронтенд: Nginx (если не работаю с Websockets) Фреймворк: Express Шаблонизатор:
    запуска
    Управление выполнением: Step
    Дополнительные скрипты для деплоя из Git и создания "виртуальных хостов"
    Имя файла: Типичный-стек-технологий-для-использования-с-node.js.pptx
    Количество просмотров: 200
    Количество скачиваний: 1