'

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

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

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


Слайд 2

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


Слайд 3

Фронтенд


Слайд 4

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


Слайд 5

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


Слайд 6

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


Слайд 7

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


Слайд 8

Упорядочивание кода 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);     }); }) До После


Слайд 9

Step и async Step — библиотека от Tim Caswell, в разработке больше года, 316 watchers Async — библиотека от Caolan McMahon, полгода в разработке, 538 watchers (помимо них есть node-seq, node-promise, flow-js, nimble, streamline и множество других, в том числе самописных)


Слайд 10

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


Слайд 11

Произвольное число задач 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);   } );


Слайд 12

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


Слайд 13

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


Слайд 14

Фреймворк


Слайд 15

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


Слайд 16

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


Слайд 17

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


Слайд 18

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


Слайд 19

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


Слайд 20

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


Слайд 21

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


Слайд 22

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


Слайд 23

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


Слайд 24

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


Слайд 25

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


Слайд 26

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


Слайд 27

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


Слайд 28

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


Слайд 29

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


Слайд 30

Вопросы?


×

HTML:





Ссылка: