Node Interactive North America 2017に行ってきた & 発表してきた
Node Interactive North America 2017 に行ってきた & 発表してきた
Node Interactive North America に行ってきました。前回は Node Interactive Europe 2016 に参加したのですが、その時の解説も一緒にどうぞ。
yosuke-furukawa.hatenablog.com
Node Interactive North America は North America というだけあって、 Canada Vancouver で開催されてます。来年も同じ場所でやるということでもしも興味あれば参加してください。
会場はここ
Vancouver Convention Centerで、池の側になってる
ちなみに1日目から発表だったので、僕の発表が終わるまで全然聴講者モードになれず、最初の発表は大分聴き逃してる。
My presentation
Node and Learn: How to create a local JavaScript Community
JavaScript コミュニティを作るには、という話で大分トークも僕がやってきたここ数年のコミュニティ活動の集大成感があった。
featured presentation
いくつか面白い発表はあったけど、その中でもこれは面白かったという発表を僕の目線で幾つか紹介する。
Take your server to ludicrous speed by mcollina
Slide: Take your HTTP server to Ludicrous Speed
nearForm のエンジニアであり、 Node.js core committer の Matteo Collina の発表。 fastify という Web Application Framework を作った話。
Express よりも速い。
どこを高速にしたのかというとJSON.stringify と router のロジック部分。 JSON.stringify が遅いから自分で JSON Schema を食わせたらスキーマを元に高速に stringify するライブラリを開発したという話。
さらに router 部分は find-my-way というライブラリを使った。これも既存のrouterよりも高速。
で、さらに面白かったのは彼の性能改善戦略で、機能開発のたびに 0x と autocannon を使ってボトルネックを特定し、そこをチューニングしていくという戦略だった。それだけではなく、 v8 の JIT killer を倒していくという方法も取っていた。これにより性能改善を機能を損なうことなく入れていくという戦略。言ってみれば Continuous Optimization のお手本とも呼べるような戦略だった。
matteo 流のライブラリ開発:
— Yosuke FURUKAWA (@yosuke_furukawa) October 5, 2017
1. benchmark 取る
2. 機能追加する
3. 追加した機能が遅くなってないことを確認する
4. 遅くなってたら最適化する
5. 2に戻る#NodeInteractive_ja
Continuous Optimization だ
New DevTools Features for JavaScript by Yang Guo
Slide: https://schd.ws/hosted_files/nina17/97/nina20217yangguo.pdf
新しいChome DevTools の開発で作られた機能の紹介。
すごい、新しいdevtoolsにはtype profile機能が付いてる。 #NodeInteractive_ja pic.twitter.com/yKERJSpRT4
— Yosuke FURUKAWA (@yosuke_furukawa) October 5, 2017
カバレッジも取れる。カバレッジがコード変換無しで取れるのは嬉しい。
やっぱり istanbul 使わなくてもinspector経由でcode coverage取れるようになるんだな。熱い。 #NodeInteractive_ja
— Yosuke FURUKAWA (@yosuke_furukawa) October 5, 2017
debugger 起動して途中でinjectionもできる。
ただし、これはv8の新しい機能なので、単純にはできない。
最新のV8をnodejsに適用するプロジェクトがあるのでそれで試すと可能。
ここに作業したリポジトリがある。
Understanding and Debugging Memory Leaks in Node.js Application by ofrobots
Slide: 見つからず
メモリリークをどうやって見つけるか、という話。
そもそもメモリリークとは "コンピュータプログラムがメモリ割り当てを不正確に管理しているため、不要になったはずのメモリを開放できなくなってしまう事を指す。"
1. Not memory leaked
— Yosuke FURUKAWA (@yosuke_furukawa) October 5, 2017
2. not memory leaked
3. Memory Leaked pic.twitter.com/rg6lwB0lmE
ということで、メモリリークを見つけるのは簡単ではない、ただツールはあるのでいくつか紹介する。
JS部分のメモリリークのツールは下記の通り
- process.memoryUsage
- Heap Snapshots
- Allocation Timeline
- Sampling Heap Profiler
- V8 Heap Statics
Native Memory Leak に関しては下記のツールがある。
- Valgrind
- tcmalloc & Sampling Heap Profiler
System levelだと top, ps, Task Manager 等
新しい v8 の機能を使ったSampling Heap Profiler を紹介する。
これはJavaScript のオブジェクトを標本抽出してデータをトラッキングするもの、全てのメモリを舐める訳じゃないので heapdump よりも本番環境で起きているメモリリークの特定に向く。
npm モジュールもある。
Node.js Technical Roadmap by James
Slide: 見つからず。
Node.js のロードマップの話。 実は Node.js には公式のロードマップは存在しない。 Node.js の機能追加は個々のコントリビュータの優先順位付けによって決まる。
ということで今の時点で検討されている機能の話をする。 Profile & Tracing ということで、要は v8 heap profiler などの検証ツールの充実。 V8 や Chrome 互換の高いものを開発することでChromeで検証ができるようにしていき、Chromeが検証ツールになっていく予定。
async_hookも追加された、これはイベントループの中で起きてることをトレースするためのもの。複雑な処理を実施している時にその都度Nodeの内部で何が起きているかをトレースするためのもの。
この他にも言語の特徴としては、 promisify や module が追加されている。 また、 Promise のエラーハンドリング周りも話があった。この他にもWeb Platform周りではWorkerの話も出ている。
Node.js Roadmap:
— Yosuke FURUKAWA (@yosuke_furukawa) October 5, 2017
- Better Error handling
- unhandle rejections
- Web Platform
- Workers (!!) (cluster is bad)#NodeInteractive
ちなみに Worker に関しては ayojs プロジェクトでは既に開発が進んでいる。
bench mark 結果も書かれており、 cluster よりも速いことが結果として書かれている。Shared Array Bufferでの速度も検証されている。
Worker data transfer benchmarks · GitHub
この辺は実は Node Collaborators Summit でもちょろっと話はあったのだが、Nodeの内部的にはまだやるかどうかきちんとは決まっていないようだ。 Workerをやっているコアコミッターの Anna のやる気次第というところか。
いやー Worker やるんだなぁ。 #NodeInteractive_ja
— Yosuke FURUKAWA (@yosuke_furukawa) October 5, 2017
Worker のが cluster よりも数倍速いとさっきJamesと話した時に言ってたので james としてはやっても良さそう。 anna 次第かな。 #NodeInteractive_ja
— Yosuke FURUKAWA (@yosuke_furukawa) October 5, 2017
この他にも紹介したい話は多くあったが、書ききれないので割愛、今月末に行われる Node 学園 28時限目で話せたら話します。
まとめ
- Node Interactive North America に行って、発表してきた。
- 僕の発表は技術的な発表というよりコミュニティ的な発表
- 面白かったのは性能面の発表(fastify, v8 profile, memory leaks)
- Node.js のロードマップ及び今やってることの紹介がされていた。