Яндекс
Филипп Ковалев
разработчик интерфейсов
Зачем модули?
1. Делимся решениями с другими командами
2. Уменьшаем кодовую базу приложения
3. Повышаем качество кода
2
Почему показываем «наружу»
1. Тесты, документация, дисциплина
2. Фидбек: фич-реквесты, баги, критика
3. Соискатели могут о...
Путь 1: xamel
Open source
at start
Сразу разрабатывался публично
5
npm install xamel
xamel .parse(xmlString, function( err , xml ) {
if ( ! err ) {
console.log( JSON.stringify( xml ) );
}
}...
<text>
м <fix> о </fix> сква
</text>
{ text: {
_: 'мсква' ,
fix: 'о'
} }
Порядок узлов: пример
01.
02.
03.
01.
02.
03.
04....
Порядок узлов: issues
8
API для доступа к узлам
xml .$( 'banner/title/text()' )
xml .$( 'menu/item' ).eq( 0 ).attr( 'link' )
xml .$( 'list/*' ).eq...
Array#map/reduce
var result = xml .$( 'text/node()' )
.map(function( el ) {
return ( el instanceof xamel.Tag ) ?
{ fix : e...
Умеет разбирать часть дерева
xamel .parse(
xml,
{ buildPath : 'path/to/node' } ,
function( error , nodeset ) {
// ...
});
...
Тестируем производительность
process.env.NODE_XAMEL_PERF_FACTOR = .75
12
Travis CI
process.env.TRAVIS === 'true'
13
Путь 2: nodules
Отчуждаем
части
приложения
nodules / susanin
роутер
npm install susanin
— Заточен под ЧПУ
— Парсинг запроса и формирование ссылок
— Гибкое определение параметров в URL
— Связ...
nodules / terror
обработка и
логирование
ошибок
npm install terror
var Terror = require( 'terror' ),
MyError = Terror .create( 'MyError' , {
STRANGE_THING_HAPPENS :
[ 200...
Бросаем исключение
throw MyError .create(
MyError .CODES.STRANGE_THING_HAPPENS);
throw new MyError (
MyError .CODES.STRANG...
Нормализуем «чужие» ошибки
try {
// ...
} catch( error ) {
MyError .ensureError( error ).log();
}
01.
02.
03.
04.
05.
20
Readable and parsable
21
Кастомизация
22
nodules / asker
http.request
wrapper
npm install asker
— gzip
— Кастомная обработка HTTP кодов ответа
— Перезапросы
— Тонкая настройка http.Agent
— Интеграция ...
OM-NOM-NOM
25
Пример вызова
var ask = require( 'asker' );
ask ({ host : 'ya.ru' }, function( err , response ) {
if ( ! err ) {
console.l...
NO PROMISES
Объект response.meta
{
options : Object ,
time : { network : Number , total : Number },
retries : { total : Number , used ...
nodules / luster
cluster wrapper
luster
{
"app" : "worker.js"
}
luster -c ./path/to/luster.conf.json
01.
02.
03.
30
Костыли
— Запуск воркера без кластера
— Отладка воркеров на разных портах
— Двухуровневая балансировка
31
Джентельменский набор
— pid–файлы
— Логирование
— Поддержание пула воркеров живыми
— Перезапуск без простоя
— Watcher файл...
Печальная
история
overclocked / mc
Чек лист
— Тесты и jshint конфиг
— Документация для людей
— «Чистота» API
— CI и контроль за зависисмостями
— Взаимодейств...
Вопросы?
37
github.com/nodules
Филипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npm
Upcoming SlideShare
Loading in …5
×

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

1,137 views
1,089 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,137
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Яндекс Филипп Ковалев разработчик интерфейсов
  2. 2. Зачем модули? 1. Делимся решениями с другими командами 2. Уменьшаем кодовую базу приложения 3. Повышаем качество кода 2
  3. 3. Почему показываем «наружу» 1. Тесты, документация, дисциплина 2. Фидбек: фич-реквесты, баги, критика 3. Соискатели могут ознакомиться с предметом 3
  4. 4. Путь 1: xamel Open source at start
  5. 5. Сразу разрабатывался публично 5
  6. 6. npm install xamel xamel .parse(xmlString, function( err , xml ) { if ( ! err ) { console.log( JSON.stringify( xml ) ); } }); 01. 02. 03. 04. 05. 6
  7. 7. <text> м <fix> о </fix> сква </text> { text: { _: 'мсква' , fix: 'о' } } Порядок узлов: пример 01. 02. 03. 01. 02. 03. 04. 7
  8. 8. Порядок узлов: issues 8
  9. 9. API для доступа к узлам xml .$( 'banner/title/text()' ) xml .$( 'menu/item' ).eq( 0 ).attr( 'link' ) xml .$( 'list/*' ).eq( 0 ).name 01. 02. 03. 9
  10. 10. 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
  11. 11. Умеет разбирать часть дерева xamel .parse( xml, { buildPath : 'path/to/node' } , function( error , nodeset ) { // ... }); 01. 02. 03. 04. 05. 06. 11
  12. 12. Тестируем производительность process.env.NODE_XAMEL_PERF_FACTOR = .75 12
  13. 13. Travis CI process.env.TRAVIS === 'true' 13
  14. 14. Путь 2: nodules Отчуждаем части приложения
  15. 15. nodules / susanin роутер
  16. 16. npm install susanin — Заточен под ЧПУ — Парсинг запроса и формирование ссылок — Гибкое определение параметров в URL — Связывание URL с данными 16
  17. 17. nodules / terror обработка и логирование ошибок
  18. 18. npm install terror var Terror = require( 'terror' ), MyError = Terror .create( 'MyError' , { STRANGE_THING_HAPPENS : [ 2001 , 'Something strange happens' ] }); 01. 02. 03. 04. 05. 18
  19. 19. Бросаем исключение throw MyError .create( MyError .CODES.STRANGE_THING_HAPPENS); throw new MyError ( MyError .CODES.STRANGE_THING_HAPPENS); 01. 02. 01. 02. 19
  20. 20. Нормализуем «чужие» ошибки try { // ... } catch( error ) { MyError .ensureError( error ).log(); } 01. 02. 03. 04. 05. 20
  21. 21. Readable and parsable 21
  22. 22. Кастомизация 22
  23. 23. nodules / asker http.request wrapper
  24. 24. npm install asker — gzip — Кастомная обработка HTTP кодов ответа — Перезапросы — Тонкая настройка http.Agent — Интеграция с Terror — Promise обертка vow-asker 24
  25. 25. OM-NOM-NOM 25
  26. 26. Пример вызова var ask = require( 'asker' ); ask ({ host : 'ya.ru' }, function( err , response ) { if ( ! err ) { console.log( response .data); } }); 01. 02. 03. 04. 05. 06. 26
  27. 27. NO PROMISES
  28. 28. Объект response.meta { options : Object , time : { network : Number , total : Number }, retries : { total : Number , used : Number } } 01. 02. 03. 04. 05. 28
  29. 29. nodules / luster cluster wrapper
  30. 30. luster { "app" : "worker.js" } luster -c ./path/to/luster.conf.json 01. 02. 03. 30
  31. 31. Костыли — Запуск воркера без кластера — Отладка воркеров на разных портах — Двухуровневая балансировка 31
  32. 32. Джентельменский набор — pid–файлы — Логирование — Поддержание пула воркеров живыми — Перезапуск без простоя — Watcher файловой системы — Плагины 32
  33. 33. Печальная история overclocked / mc
  34. 34. Чек лист — Тесты и jshint конфиг — Документация для людей — «Чистота» API — CI и контроль за зависисмостями — Взаимодействие с пользователями 36
  35. 35. Вопросы? 37 github.com/nodules

×