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

  • 970 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
970
On Slideshare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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