Skip to content

Instantly share code, notes, and snippets.

@koh110
Created November 13, 2016 13:05
Show Gist options
  • Save koh110/52c4d4f31acd619b668af1778f91e919 to your computer and use it in GitHub Desktop.
Save koh110/52c4d4f31acd619b668af1778f91e919 to your computer and use it in GitHub Desktop.
nodefest2016 memo

Building Interactive npm Command Line Modules

Irina Shestak

interactiveなcommand lineアプリケーション

オプションの意味を全て理解しながらcommand line command を打つのは難しいよね

commnadをprogramに伝えるという表現ではなく、プログラムと対話すると表現するべきじゃない? webpageだと登録とかインタラクティブにできるとわかりやすいし、コマンドラインもそうあるべきじゃないか

より使いやすくするための対話性をレクチャーします

bash,ruby,perlなど色々あるけど、nodeを使うのがベストでしょう

  • lv1. argument parsing yargsというargumenr parserがすごい使いやすい

  • lv2. give your options aliases 多くのoptionは大体aliasを持っている

--name = -n など

  • lv3. set up default values

  • lv4. provide a help menu yargs使うとhelp function呼び出すだけで簡単にできるよ

必須ではないオプションなどわかりやすい表示がなされる

  • lv5. get input from your users interactiveにinputを受け取るためにはpromptで受け取れる prompt.start()

yargsじゃなくてpromzardというのもあるよ

  • lv6. why not use commands オプションを沢山与えると複雑になるから、インタラクティブなほうがいいよ

コマンドの外部ファイル化もできる

Debugging Node.js Performance Issues in Production

Thomas Watson

http://togetter.com/li/1047941?utm_source=dlvr.it&utm_medium=twitter

opbeatというパフォーマンスモニタリングをする会社 Node.jsがたまにパフォーマンス低下するからそれをモニタリングするのが仕事

どうやってproductionのデバッグをするか

why is it important ? なぜproductionになるとパフォーマンス issueが発生するか

remoteで発生するissueをdebugするのは難しいから

live applicationのPerformanceに影響を与えたくないのでremoteでdebugするのは難しい productionのapplicationはどうやってフックしようか

premature optimization

baseline performance

measuring どうやってperformanceを解析できるか

JSONでかかったらparseに時間かかるよね

JSON.parse(req.body)

->

console.time('json-parse')
JSON.parse(req.body)
console.timeEnd('json-parse')
// json-arse 131ms

Causes of Slowness

  • single-threaded 必ずしも理由というわけではないけど、ひとつの要因

  • cpu intensive code

  • slow I/O databaseのi/oとかとか

  • event loop saturation Node.jsのevent loopがいっぱいになる たくさんcallbackよんだり

  • running out of memory メモリたんなくなったり

  • garbage collection Node.jsのGCの実装は,GCが起きると全てのengineのプロセスが止まるので自分のアプリケーションが動かなくなる

cpu intensive code

  • syncronous i/o
  • json.parse
  • momeれず...
nodejs --perf_basic_prof_only_functions cpu.js

このオプションはproductionでも実行できるからモニタリングできるひとつの方法 node > v6以上でperfログというのがとれるようになる linuxのperfログから出力できる

perfというツールを使ってみる 実行してるサーバをperfというツールで監視して別タブでアクセスを大量に送る

perfは動いているサーバのモニタリングをする 解析はperf.dataというファイルから読み解く /tmp以下にperf-2466.mapのようなファイルが出来る

nodeサーバがなんのlinuxカーネルを呼び出しているかの解析ができる

https://www.npmjs.com/package/0x https://github.com/brendangregg/FlameGraph

solaris mdb v8のcoredumpできる

autopsyというツールがあるよ

GraphQL for the RESTful crowd

Barak Chamo

Why to Standardize your READMEs

Richard Littauer

README is 最高. README is super important.

ドキュメンテーションの最初のcontact documentationよりREADMEの方が大事

多くのREADMEはinformation的に足りてない

README ARE DIFFICULT

standard is easier standard jsがあると無駄な議論が減って本質的な開発をする時間が増える

what is in standard-readme

  • a specification
  • a generator
  • a linter
  • a badge
  • example templates

spec overview required

  • title
  • short description
  • ToC(if > 100 lines)
  • install
  • usage
  • contribute
  • license

The journey toward ES modules.

Bradley Farias https://docs.google.com/presentation/d/1J9mN3N1KZXGwn7ufrv9UAIiUzKo8zsQaQwIKseebjzo/edit#slide=id.g18cb3b1c5f_0_263

Node.jsではv8での実装待ち ECMA形式のモジュールが導入されるのは最速でもNode10から

scriptとしてパースするか、モジュールとしてパースするかによって結果が違うかもしれない

.mjsという拡張子でecma moduleと判断するのが有力 複数回 requireされたときどういう挙動になるのか。常に同じものが返らなければいけない。そうすると、GCの対象にできない

babelは人気だけどstandardを守ってない script and module grammerが混ざっている

この辺守ってないのやめてよね

  • Non-ESM behavior ** Loading Errors ** Runtime Errors ** Cache ** Named import variables compile to property access module.exports is mutable

これはやばい Bluebird.promisifyAll does not work on ESM

babelと互換取らないといけないと思ってる? -> 個人的には取らなくていいと思ってるけど、全体的には数100あるモジュールを守るためにある程度考えてる

React + Reduxを使った大規模商用サービスの開発

monolithic JavaScript 流石に重すぎるから更新のあった部分だけhashを再生成して分割

  • webpack.jsonp
  • library
  • 各画面ごとのjs

分割しててもエラーが発生したら画面reloadすればSSRでちゃんとエラーを表示してくれる

Partial renderingはSSRとSEOスコアが一緒

SSRは逆に遅くなるからあんまやらないほうがいい

Next.js

routingやSSR, コード分割,razy loadなどを自動で行う

SPAの問題

  • 初期表示がが遅い
  • ページが増えると重くなる

SSR 初期表示パフォーマンスの工場、SEO -> jsファイルを置くだけにする(Next.js)

「リッチなWebアプリケーションのための7つの原則」読んでね

css glamorライブラリを使う vendor prefixとかもやってくれる

Linkコンポーネント pushStateを使ったページ遷移を提供する

isomorphic

イミュータブルなデプロイサービス

https://zeit.co/now

  1. nowをインストール
  2. nowコマンドを実行
  3. 初回のみメールによるログイン
npm install -g now
now

イミュータブルデプロイ デプロイするごとに新しいURLが作成される 古いURLは消す必要はない

公開するためにはわかりやすいエイリアスを生成されたリンクに貼る

メリット

  • URLに対する一意性がある
  • デプロイ作業が簡単 ** デプロイしたものがokだったらエイリアスを張り替えるだけでデプロイ完了

docker fileも対応してるよ

PostCSS: Build your own CSS processor

reworkでautoprefixer作ってたけど、作者(TJ)にdisられたし自分で作ってみたぜ -> PostCSS

compassに比べてautoprefixerが約50倍高速

stylelint

stylefmt -> 自動フォーマットしてくれるツール

postcssのpluginはここで探してね http://postcss.parts/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment