Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,267 views

Published on

  • Be the first to comment

  • Be the first to like this

Филипп Ковалев — Путь в 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

×