Филипп Ковалев — Путь в npm

37
Яндекс Филипп Ковалев разработчик интерфейсов

Upload: yandex

Post on 16-Jun-2015

1.044 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Филипп Ковалев — Путь в npm

Яндекс

Филипп Ковалевразработчик интерфейсов

Page 2: Филипп Ковалев — Путь в npm

Зачем модули?

1. Делимся решениями с другими командами

2. Уменьшаем кодовую базу приложения

3. Повышаем качество кода

2

Page 3: Филипп Ковалев — Путь в npm

Почему показываем «наружу»

1. Тесты, документация, дисциплина

2. Фидбек: фич-реквесты, баги, критика

3. Соискатели могут ознакомиться с предметом

3

Page 4: Филипп Ковалев — Путь в npm

Путь 1: xamel

Open source

at start

Page 5: Филипп Ковалев — Путь в npm

Сразу разрабатывался публично

5

Page 6: Филипп Ковалев — Путь в npm

npm install xamel

xamel .parse(xmlString, function( err , xml ) {

if ( ! err ) {

console.log( JSON.stringify( xml ) );

}

});

01.

02.

03.

04.

05.

6

Page 7: Филипп Ковалев — Путь в npm

<text>

м <fix> о </fix> сква

</text>

{ text: {

_: 'мсква' ,

fix: 'о'

} }

Порядок узлов: пример

01.

02.

03.

01.

02.

03.

04.

7

Page 8: Филипп Ковалев — Путь в npm

Порядок узлов: issues

8

Page 9: Филипп Ковалев — Путь в npm

API для доступа к узлам

xml .$( 'banner/title/text()' )

xml .$( 'menu/item' ).eq( 0 ).attr( 'link' )

xml .$( 'list/*' ).eq( 0 ).name

01.

02.

03.

9

Page 10: Филипп Ковалев — Путь в npm

Array#map/reduce

var result = xml .$( 'text/node()' )

.map(function( el ) {

return ( el instanceof xamel.Tag ) ?

{ fix : el .text() } :

el ;

});

01.

02.

03.

04.

05.

06.

10

Page 11: Филипп Ковалев — Путь в npm

Умеет разбирать часть дерева

xamel .parse(

xml,

{ buildPath : 'path/to/node' } ,

function( error , nodeset ) {

// ...

});

01.

02.

03.

04.

05.

06.

11

Page 12: Филипп Ковалев — Путь в npm

Тестируем производительность

process.env.NODE_XAMEL_PERF_FACTOR = .75

12

Page 13: Филипп Ковалев — Путь в npm

Travis CI

process.env.TRAVIS === 'true'

13

Page 14: Филипп Ковалев — Путь в npm

Путь 2: nodules

Отчуждаем

части

приложения

Page 15: Филипп Ковалев — Путь в npm

nodules / susanin

роутер

Page 16: Филипп Ковалев — Путь в npm

npm install susanin

— Заточен под ЧПУ

— Парсинг запроса и формирование ссылок

— Гибкое определение параметров в URL

— Связывание URL с данными

16

Page 17: Филипп Ковалев — Путь в npm

nodules / terror

обработка илогированиеошибок

Page 18: Филипп Ковалев — Путь в npm

npm install terror

var Terror = require( 'terror' ),

MyError = Terror .create( 'MyError' , {

STRANGE_THING_HAPPENS :

[ 2001 , 'Something strange happens' ]

});

01.

02.

03.

04.

05.

18

Page 19: Филипп Ковалев — Путь в npm

Бросаем исключение

throw MyError .create(

MyError .CODES.STRANGE_THING_HAPPENS);

throw new MyError (

MyError .CODES.STRANGE_THING_HAPPENS);

01.

02.

01.

02.

19

Page 20: Филипп Ковалев — Путь в npm

Нормализуем «чужие» ошибки

try {

// ...

} catch( error ) {

MyError .ensureError( error ).log();

}

01.

02.

03.

04.

05.

20

Page 21: Филипп Ковалев — Путь в npm

Readable and parsable

21

Page 22: Филипп Ковалев — Путь в npm

Кастомизация

22

Page 23: Филипп Ковалев — Путь в npm

nodules / asker

http.requestwrapper

Page 24: Филипп Ковалев — Путь в npm

npm install asker

— gzip

— Кастомная обработка HTTP кодов ответа

— Перезапросы

— Тонкая настройка http.Agent

— Интеграция с Terror

— Promise обертка vow-asker

24

Page 25: Филипп Ковалев — Путь в npm

OM-NOM-NOM

25

Page 26: Филипп Ковалев — Путь в npm

Пример вызова

var ask = require( 'asker' );

ask ({ host : 'ya.ru' }, function( err , response ) {

if ( ! err ) {

console.log( response .data);

}

});

01.

02.

03.

04.

05.

06.

26

Page 27: Филипп Ковалев — Путь в npm

NO PROMISES

Page 28: Филипп Ковалев — Путь в npm

Объект response.meta

{

options : Object ,

time : { network : Number , total : Number },

retries : { total : Number , used : Number }

}

01.

02.

03.

04.

05.

28

Page 29: Филипп Ковалев — Путь в npm

nodules / luster

cluster wrapper

Page 30: Филипп Ковалев — Путь в npm

luster

{

"app" : "worker.js"

}

luster -c ./path/to/luster.conf.json

01.

02.

03.

30

Page 31: Филипп Ковалев — Путь в npm

Костыли

— Запуск воркера без кластера

— Отладка воркеров на разных портах

— Двухуровневая балансировка

31

Page 32: Филипп Ковалев — Путь в npm

Джентельменский набор

— pid–файлы

— Логирование

— Поддержание пула воркеров живыми

— Перезапуск без простоя

— Watcher файловой системы

— Плагины

32

Page 33: Филипп Ковалев — Путь в npm
Page 34: Филипп Ковалев — Путь в npm

Печальнаяистория

overclocked / mc

Page 35: Филипп Ковалев — Путь в npm
Page 36: Филипп Ковалев — Путь в npm

Чек лист

— Тесты и jshint конфиг

— Документация для людей

— «Чистота» API

— CI и контроль за зависисмостями

— Взаимодействие с пользователями

36

Page 37: Филипп Ковалев — Путь в npm

Вопросы?

37

github.com/nodules