「Node学園 34時限目 jsconf.eu 報告会」に参加してきました

  • Node学園 34時限目 jsconf.eu 報告会に参加してきました。

nodejs.connpass.com

2019.jsconf.eu

タイトル 登壇者
JavaScript Package Manager 2019 yosuke_furukawa
Cloudflare Workersの紹介 dorayakikun
Node.jsとWebAPIのこれまで、現在、これから Leko
jsconf.eu 報告会 Performance Empathy 編 tomonari-takahashi
TypeScriptでコマンドラインパーサー Akito0107

JavaScript Package Manager 2019

  • yosuke_furukawaさん

JSのPackageManager

  • npm
    • npm inc
    • npm cli
    • npm reistry
  • yarn

npm

  • npmの仕組み
    1. ローカル依存ファイルを読む(package-lock.jsonとか)
    2. 存在しないpackageのメタデータをfetch
    3. 木構造を計算して実行
    4. packageのtarをダウンロード
    5. インストールスクリプト実行
  • ダウンロードが高負荷
    • fetchしてgunzipしてコピーする
    • Network負荷
    • CPU負荷
    • FileIO負荷

tink

  • 新しいパッケージマネージャー
  • npm cliをもとにして作られてるもの
    • ゆくゆくはnpmに統合
  • npm iの処理を実行時にやればいいのでは
    • node_modulesを仮想上のフォルダにする
    • ランタイムでモジュール解決するからnpm iがいらない
      • コピーしないからFileIO改善
      • cloneして実行するだけでよくなる
  • zero install
  • node main.jsではなくtink sh main.jsとするtinkで実行できる
  • prepareとunwind
    • prepareは事前にmoduleをfetch(本番はこれでやるとよい)
    • unwindは事前にnode_modulesを実体化

loadmap

  • npm v8でtinkがnpmに統合される

yarn

  • yarnのv2でも同じzero installに取り組んでいる

今後

  • npmもyarnもzero installになっていく
  • npmとyarnどちらも有意差はまだない
  • まだexperimentalな段階

JavaScript Registryの今後

  • JavaScript Registryとは
    • Packageをバックで管理するサービス
  • JavaScriptのRegistryをビジネス的に成功させるのは難しい
    • public moduleは無償で提供
    • アクセスコントロールするなら有償
  • npmは100万モジュールある
    • rubyのgemは30万
  • Entropic
    • 中央集権ではなく分散管理していこう
    • npmにつながる新しいregistry
    • みんなで治験を高めて分散管理できる状態を目指す

Cloudflare Workersの紹介

  • dorayakikunさん

wasm

  • ここ1~2年盛り上がってきた
  • JSConf EUでのwasmのセッション3つ

Webの現状

  • JSのbyteサイズが年々上昇している
    • この3年でモバイルは50%増加
  • Time To Interactive
    • TTIの平均値9秒以上

既存の戦略

  • SSR + Cache
    • Time to First Byteが遅い
  • CSR + Cache
    • FCPからTTIまでラグがある
  • どれもトレードオフがある
  • => Edge Side Rendering

Edge Side Rendering

  • エッジサーバでhtmlをrendering
  • SSRCSRのいいとこ取り

Cloudflare Workers

  • エッジサーバ上でserverlessアプリを動かせるサービス
  • 言語はjsかwasm
  • デプロイはwebかwrangler
  • 要素技術
    • V8のIsolate

Edge Side Renderingは有効か

  • グローバルなサービスだと旨味がありそう
  • エッジサーバで何させるかは議論の余地ある

Terrarium

  • Fastlyが提供するEdge Computing Platform
  • wasmのみ

Node.jsとWebAPIのこれまで、現在、これから

  • Lekoさん

NodeとWebAPIのこれまで

  • ブラウザのJSの仕様/NodeのJSの仕様
  • 片方にあったやつをもう片方でも実装されたりとか
    • 同じようなことなのに微妙に違うとか
  • NodeとWebAPIを近づけようとしてる
    • URLSearchParams
    • TextEncoder
    • Wrker Threads
    • Performance Timing API
  • 議論中
    • StreamsAPI
    • FetchAPI
      • 仕様がとても複雑
      • Nodeで全部再現できるのか、再現する必要があるのか

まとめ

  • 多くのWebAPIがNodeに取り入れられている
  • ワークフローを改善してより改善されていく

参考

blog.leko.jp

jsconf.eu 報告会 Performance Empathy 編

  • tomonari-takahashiさん

パフォーマンスに関して大切なこと

  • デフォルト/デファクトツールを使う
    • ブラウザデフォルトでできるようになってることも多い
    • lazy loading
    • virtual-scroller
  • パフォーマンスをマネジメント
    • Performance budget

TypeScriptでコマンドラインパーサー

  • Akito0107さん

コマンドラインパーサーを作る

  • 有名なライブラリがいろいろある
    • minimist
    • commander
  • オプションが複雑だとどれもつらい
    • 型がほしい
    • => 作った

github.com