SlideShare a Scribd company logo
Copyright © DeNA Co.,Ltd. All Rights Reserved.
chunked encoding
を使った高速化の考察
東京Node学園26時限目 2017/6/28
渋川よしき
Copyright © DeNA Co.,Ltd. All Rights Reserved.
新刊でました!
■ 初版を買うなら今がチャンス!今すぐ本屋へ
■ ブラウザなどの通信まわり(JSとかCSSを
除く)のいろいろなトピックを思いつく限り
集めました
■ ブラウザ(利用者)視点で説明するようにして
います。
Copyright © DeNA Co.,Ltd. All Rights Reserved.
■ ウェブ系の話題で、
「だよねーわかるわかる…」
と分かったふりをしたことがある人に
オススメ!
■ アニメについて詳しくなりたい人は
弊社のハッカドールをご利用ください
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日の発表はReal World HTTP
を読んでいる前提で進めます
Copyright © DeNA Co.,Ltd. All Rights Reserved.
その前に
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Mithrilの最新動向も気になりますよね!
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Mithril 1.xのバージョンアップについて
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Mithril 0.2.x
■ 少ないAPI
■ 小さなダウンロードサイズ
■ 仮想DOMを使った高速な描画
■ イベントハンドラと通信のコールバックを活用した描画タイミング制御
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Mithril 0.2.x : 21関数、2プロパティ
■ コア
⁃ m()
⁃ m.component()
⁃ m.prop()
⁃ m.withAttr()
■ ラウティング
⁃ m.mount()
⁃ m.route(elem, defualt, routes)
⁃ m.route(path, params, replaceHistory)
⁃ m.route()
⁃ m.route(element)
⁃ m.route.mode
⁃ m.route.param
⁃ m.route.buildQueryString()
⁃ m.route.parseQueryString()
■ データ
⁃ m.request()
⁃ m.deferred()
⁃ m.sync()
■ HTML
⁃ m.trust()
■ レンダリング
⁃ m.render()
⁃ m.redraw()
⁃ m.redraw.strategy()
⁃ m.startComputation()
⁃ m.endComputation()
■ テスト
⁃ m.deps()
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Mithril 1.x : 14関数、2プロパティ
■ コア
⁃ m()
⁃ m.component()
⁃ m.prop()
⁃ m.withAttr()
■ ラウティング
⁃ m.mount()
⁃ m.route(elem, defualt, routes)
⁃ m.route(path, params, replaceHistory)→m.route.set()
⁃ m.route()→m.route.get()
⁃ m.route(element)→m.route.link()
⁃ m.route.mode→m.route.prefix
⁃ m.route.param
⁃ m.route.buildQueryString()→m.buildQueryString()
⁃ m.route.parseQueryString()→m.parseQueryString()
■ データ
⁃ m.request()
⁃ m.deferred()
⁃ m.sync()
■ HTML
⁃ m.trust()
■ レンダリング
⁃ m.render()
⁃ m.redraw()
⁃ m.redraw.strategy()
⁃ m.startComputation()
⁃ m.endComputation()
■ テスト
⁃ m.deps()
■ 追加
⁃ m.fragment()
⁃ m.version
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Mithril 1.xはマジキチ
■ 機能が減った
⁃ 関数の数が21→14
⁃ ファイルサイズも減った
⁃ deferredがES6標準のPromiseに移行
⁃ 描画タイミングコントロールなんて必要なかった
⁃ プロパティは外部に切り出されてちょっとリッチなストリームになった
■ 高速化したらしい
■ 設計のガイドラインからビューモデルが消えた
⁃ ドキュメントからビューモデルの文字が消えさった
■ ライフサイクルメソッドが整理された
■ なお、マイグレーションスクリプトで変換はほぼ自動でいける
⁃ http://mithril-ja.js.org/change-log.html#migrating-from-v02x
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Mithril 1.xを活かす設計
■ 仮想DOMのパフォーマンス・チューニングがしやすく
⁃ 仮想DOMの内部設計がドキュメント化された。コードも読みやすい。
■ コンポーネントは表示に特化
⁃ ラウターリゾルバーを使ってデータ取得をコンポーネントの外に移動で
きるように
■ データ取得部分はモデルに
⁃ ビューモデルの役割もモデルにマージ
⁃ ただ、通信の最適化とかこのあたりは今後革新がありそう
(Mithrilにかぎらず、React、Vue、Riot、Angularとかでも)
■ 終了アニメーション
⁃ ライフサイクルメソッドがPromiseを返せる。終了を遅延できる。
⁃ 0.2.xでは力技で実現するのは大変だった。
Copyright © DeNA Co.,Ltd. All Rights Reserved.
ドキュメント(http://mithril-ja.js.org/)は翻訳済み
Copyright © DeNA Co.,Ltd. All Rights Reserved.
本もあるよ!
■ オライリーの電子書籍です
■ 0.2.x準拠
■ 前ページの項目の差分に気をつけながら
お読みいただければ
⁃ ビューモデルもモデルの一部に
⁃ 描画タイミングの制御はなくなった
⁃ モデル取得の司令はラウターリゾルバーに
持っていく方がたぶん良い
■ 精神的な部分は互換性があります!
■ そろそろ改訂したい気持ちがあります
Copyright © DeNA Co.,Ltd. All Rights Reserved.
chunked encoding
を使った高速化の考察
東京Node学園26時限目 2017/6/28
渋川よしき
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Transfer-Encoding: chunked
■ Real World HTTP P119を開いてください
■ Transfer-Encoding: chunked
■ HTTP/1.1で追加された機能
■ ボディを細切れにして転送する
⁃ 最初にContent-Lengthで全体の長さを送らない
⁃ チャンクサイズ(16進数)と、その長さのボディという組を何回かに分
けて送る
⁃ 最後に長さゼロを送ると終了
⁃ ボディサイズを最初に決めなくてもいい
Copyright © DeNA Co.,Ltd. All Rights Reserved.
質問: Transfer-Encoding: chunked
を普段から意識していますか?
Copyright © DeNA Co.,Ltd. All Rights Reserved.
有効回答数: 19
Copyright © DeNA Co.,Ltd. All Rights Reserved.
有効回答数: 19
半数以上の人があまり意識してい
ない
Copyright © DeNA Co.,Ltd. All Rights Reserved.
普段は意識しなくてもいい
■ どのプログラミング言語のHTTPクライアントAPIも、勝手に結合してくれる
■ bodyをストリームのようなAPIで読み込むと、場合によってはチャンクごとに
返ってくるかも?
■ 大抵HTTPクライアントを書く時は、JSONとかの細切れにパースできないデー
タが欲しいだろうから、末尾までまるっと読み込みますよね?
Copyright © DeNA Co.,Ltd. All Rights Reserved.
SSRは本当に早いのか?
■ SSRを使うと初回ロードが高速になるっていうけど
⁃ 本当に高速なの?
⁃ Node.jsのイベントループに負荷をかけるしスケールするか疑わしい(キ
ャッシュしないと)
■ 最近のウェブのデータ量は大きい
⁃ JSも数100KB
⁃ CSSもでかい
⁃ 画像も多い。全部で数MBはある。
Copyright © DeNA Co.,Ltd. All Rights Reserved.
HTTP
リクエスト
リクエスト
受信
DB
アクセス
HTML
レンダ
リング
HTML
パース
初回表示されるまでの流れ
ファイル
転送
アセット
リクエスト
表示
Copyright © DeNA Co.,Ltd. All Rights Reserved.
HTTP
リクエスト
リクエスト
受信
DB
アクセス
HTML
レンダ
リング
HTML
パース
初回表示されるまでの流れ
ファイル
転送
アセット
リクエスト
表示
表示するにもいろいろ情報を集め
る必要がある
HTMLパースをするまで
必要なJS/CSS/画像がわからない
リクエスト開始が遅い
実際にはここが一番支配
的になるはず
CSS→画像も読み込まな
いと必要なファイルが分
からない
Copyright © DeNA Co.,Ltd. All Rights Reserved.
chunked encodingを使うアイディア
■ HTMLを読み込まないと必要なリソースがわからない・・・
⁃ <script>タグと<link>タグ部分だけ先に読み込ませてしまえばいいのでは?
■ 期待する結果
HTTP
リクエスト
リクエスト
受信
DB
アクセス
HTML
レンダ
リング
HTML
パース
ファイル
転送
アセット
リクエスト
表示
HTML
パース
高速化
Copyright © DeNA Co.,Ltd. All Rights Reserved.
■ 実験してみた:その1
⁃ すみません。Goで書きました。
⁃ HTTP/2を使っています。
⁃ HTMLはまずヘッダーを返し、末尾のコンテンツは4秒後に返した
⁃ リソースはJS、async付きJS、defer付きJS、CSSの4種類を読み込み。サーバ
ー側で、2秒に返信と6秒後に返信の2パターン8通り返してみた
⁃ コードはこちら
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Copyright © DeNA Co.,Ltd. All Rights Reserved.
即座にヘッダー部だけ返し、
残りは4秒後に返している
Copyright © DeNA Co.,Ltd. All Rights Reserved.
サーバーリクエストはその瞬間に
スタートしている(レスポンスは
サーバー側で2-6秒ブロック)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
スの<script>タグと<link>のスタイ
ルシートの読み込みがブロックに
なっていて、完了すると表示され
る
Copyright © DeNA Co.,Ltd. All Rights Reserved.
■ 実験してみた:その2
⁃ すみません。Goで書きました。
⁃ HTTP/2を使っています。
⁃ HTMLはまずヘッダーを返し、末尾のコンテンツは4秒後に返した
⁃ リソースはJS、async付きJS、defer付きJS、CSSの4種類を読み込み。
サーバー側で、2秒に返信と6秒後に返信の2パターン8通りのうち、6秒間
ブロッキングするJSとCSSを抜いた6パターンでアクセス
⁃ コードはこちら
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Copyright © DeNA Co.,Ltd. All Rights Reserved.
ブロッキングするJS/CSSが終わっ
たこの段階(2秒後)で表示が開始
されている(この時点で読み込み
済みのCSSは利用される
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Copyright © DeNA Co.,Ltd. All Rights Reserved.
後半のチャンクが到着したら再度
画面更新
window.addEventListener('load')イ
ベントは最後のチャンクまで呼ば
れたら実行される。
Copyright © DeNA Co.,Ltd. All Rights Reserved.
実験成功
■ 先に返したヘッダー部分をパースしてChromeは必要なリクエストを取得した
⁃ chunked-encodingは高速化に使える
■ ドキュメントのロードイベントは全HTMLの読み込みが終わってから実行
⁃ 先にJSをロードしても、documentオブジェクトがまだないので何も表示
もできなかった
■ アセットの種類によって優先度が変わっている
⁃ スの<script>タグだとhigh
⁃ <link>のCSSファイルはhighest
⁃ async/defer付きの<script>タグはlow
■ 優先度が高いアセットはダウンロード完了するまで表示がストップ
Copyright © DeNA Co.,Ltd. All Rights Reserved.
・・・実はHTTP/2では
■ chunked-encodingなんてものはありません→
■ HTTP/2では各ファイルごとにストリームができる
⁃ ストリームは擬似的なTCPコネクション
⁃ ストリームには、データ片がフレームという単位で送信される
⁃ HEADERSフレーム(ヘッダー)やDATAフレーム(ボディ)などがある
⁃ 各ストリームを構成するフレームは終了ビットを立てない限りは同じ種
類のフレームを連続して送信できる
終了ビットの立ってないDATAフレームを断続的に送信することで
chunked-encodingと同じことが実現できる!!!
GoのAPIは同じFlusherインタフェースでHTTP/1.1と2の両対応
RFC 7540 : Section 8.1
HTTP/2 uses DATA frames to carry message
payloads. The "chunked" transfer encoding
defined in Section 4.1 of [RFC7230] MUST NOT
be used in HTTP/2.
Copyright © DeNA Co.,Ltd. All Rights Reserved.
実はこの手法
■ オライリーの続・ハイパフォーマンスWebサイト
にも書いてありました。
⁃ 第12章: ドキュメントのフラッシュ
■ やってみたらHTTP/2でもまだ有効というのが
今回の収穫
■ ダウンロードのアセット間のブロッキングが
当時とは違って行われないことがわかりました
⁃ HTTP/2にすればアセットの順序とか考えずに
トップスピードでダウンロード
Copyright © DeNA Co.,Ltd. All Rights Reserved.
それ以外の高速化のアイディア
※一部妄想です
Copyright © DeNA Co.,Ltd. All Rights Reserved.
HTTP/2時代のスクリプトの配布は?
■ 分割されたファイルをそのまま配信する方が良い
⁃ ファイル片ごとにキャッシュが効くので二回目以降のメリットが大きい
■ webpack/browserify/rollupとかは不要になる?
⁃ たぶんならない
⁃ tree shakingでファイルサイズ削減はあって損はないはず
⁃ npmとか余計なファイル入りまくりなのでそのままデプロイとか辛い
⁃ 単純にソースコードのままだと、子・孫のファイル取得に時間がかかる
⁃ 途中までは既存のバンドルツールと同じ処理をするが、最後にファイル
結合しないで、必要なすべてのファイルのimport文を並べたエントリー
ポイントスクリプトファイルを生成するようになるのでは?
誰か作って!
Copyright © DeNA Co.,Ltd. All Rights Reserved.
ボディをServer Side Renderingしないアイディア
■ 完全なSPAでは、JSのロードが終わってから、そのJSがサーバーにリクエスト
を送るため、データのロードが開始するのが後ろ倒しになる
⁃ 結果として表示に時間がかかる
■ 前倒しにできないか?
⁃ 完全なHTMLのレンダリングをせずに、インラインJSタグを使ってJSONを
埋めむとか
⁃ あるいは、インラインのスクリプトはCSPでひっかかる可能性があるので
いっそのこと/data.jsみたいなJSを読み込むようにして、そのスクリプト
を動的生成するとか?
• 安全なJSONP
■ SSRが速度に効くというの、JSライブラリがでかすぎただけでは?
⁃ MithrilとかMoon.jsを使えば初回表示も操作開始も爆速にできないか?
⁃ あとはchunked-encodingを使ってJSロードを早めればさらに高速に
Copyright © DeNA Co.,Ltd. All Rights Reserved.
まとめ
■ chunked-encodingでダウンロード速度改善はHTTP/2時代にも有効
■ アセットが巨大化していく時代にあっては効果が大きい
⁃ SSRをして、初回HTML生成までリードタイムが長い場合に
一番効果が大きそう
⁃ SSRしないけど、JSONを埋め込んでSPAの手法で高速化するときも有効
■ chunked-encodingとかHTTP/2のフレームあたりの詳しい説明が知りたい方は
Real World HTTPっていう本に書かれているらしいですよ!

More Related Content

What's hot

インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
Akihiro Kuwano
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
 
nginx入門
nginx入門nginx入門
nginx入門
Takashi Takizawa
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
yoku0825
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
さくらのクラウドハンズオン~ロードバランサ編~
さくらのクラウドハンズオン~ロードバランサ編~さくらのクラウドハンズオン~ロードバランサ編~
さくらのクラウドハンズオン~ロードバランサ編~
さくらインターネット株式会社
 
Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話
Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話
Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話
Hajime Sano
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事
uchan_nos
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
NTT DATA Technology & Innovation
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
Metaspace
MetaspaceMetaspace
Metaspace
Yasumasa Suenaga
 
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfirek8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
Yahoo!デベロッパーネットワーク
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 

What's hot (20)

インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
nginx入門
nginx入門nginx入門
nginx入門
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
さくらのクラウドハンズオン~ロードバランサ編~
さくらのクラウドハンズオン~ロードバランサ編~さくらのクラウドハンズオン~ロードバランサ編~
さくらのクラウドハンズオン~ロードバランサ編~
 
Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話
Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話
Kinesis→Redshift連携を、KCLからFirehoseに切り替えたお話
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
Metaspace
MetaspaceMetaspace
Metaspace
 
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfirek8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
k8s初心者が gRPC × envoyを導入したら色々苦労した話 #yjbonfire
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 

Viewers also liked

MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
Takanori Sejima
 
Cephを用いたwordpressの構築[LT版]
Cephを用いたwordpressの構築[LT版] Cephを用いたwordpressの構築[LT版]
Cephを用いたwordpressの構築[LT版]
Kat 0gm
 
Advanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutesAdvanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutes
Hiroshi SHIBATA
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
Takanori Sejima
 
性能測定道 事始め編
性能測定道 事始め編性能測定道 事始め編
性能測定道 事始め編
Yuto Hayamizu
 
Prometheus触ってみた
Prometheus触ってみたPrometheus触ってみた
Prometheus触ってみた
Sho2010
 
性能測定道 実践編
性能測定道 実践編性能測定道 実践編
性能測定道 実践編
Yuto Hayamizu
 
Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方
kaiba d
 
スクラムを導入してみて一回挫折したけど再起させた話
スクラムを導入してみて一回挫折したけど再起させた話スクラムを導入してみて一回挫折したけど再起させた話
スクラムを導入してみて一回挫折したけど再起させた話
PIXTA Inc.
 
情報科学における18のメタテクニック
情報科学における18のメタテクニック情報科学における18のメタテクニック
情報科学における18のメタテクニック
nakano_lab
 
サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善
PIXTA Inc.
 
ウェブエンジニアのための色の話
ウェブエンジニアのための色の話ウェブエンジニアのための色の話
ウェブエンジニアのための色の話
Kazuyuki CHINDA
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
 
エフェクト用 Shader 機能紹介
エフェクト用 Shader 機能紹介エフェクト用 Shader 機能紹介
エフェクト用 Shader 機能紹介
Hajime Sanno
 
5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方
Jumpei iwamura
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907
NodejsFoundation
 
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
Hidenori Doi
 
Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기
JeongHun Byeon
 
エフェクトにしっかり色を付ける方法
エフェクトにしっかり色を付ける方法エフェクトにしっかり色を付ける方法
エフェクトにしっかり色を付ける方法
kmasaki
 
スマホゲームのUI仕様書
スマホゲームのUI仕様書スマホゲームのUI仕様書
スマホゲームのUI仕様書
Katsumi Mizushima
 

Viewers also liked (20)

MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
 
Cephを用いたwordpressの構築[LT版]
Cephを用いたwordpressの構築[LT版] Cephを用いたwordpressの構築[LT版]
Cephを用いたwordpressの構築[LT版]
 
Advanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutesAdvanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutes
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
 
性能測定道 事始め編
性能測定道 事始め編性能測定道 事始め編
性能測定道 事始め編
 
Prometheus触ってみた
Prometheus触ってみたPrometheus触ってみた
Prometheus触ってみた
 
性能測定道 実践編
性能測定道 実践編性能測定道 実践編
性能測定道 実践編
 
Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方Web現場Meetup #2 圧倒的成長環境の作り方
Web現場Meetup #2 圧倒的成長環境の作り方
 
スクラムを導入してみて一回挫折したけど再起させた話
スクラムを導入してみて一回挫折したけど再起させた話スクラムを導入してみて一回挫折したけど再起させた話
スクラムを導入してみて一回挫折したけど再起させた話
 
情報科学における18のメタテクニック
情報科学における18のメタテクニック情報科学における18のメタテクニック
情報科学における18のメタテクニック
 
サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善サービスのスケール化のための検索システム改善
サービスのスケール化のための検索システム改善
 
ウェブエンジニアのための色の話
ウェブエンジニアのための色の話ウェブエンジニアのための色の話
ウェブエンジニアのための色の話
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
 
エフェクト用 Shader 機能紹介
エフェクト用 Shader 機能紹介エフェクト用 Shader 機能紹介
エフェクト用 Shader 機能紹介
 
5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方5年しかもたない最高のシステムとの向き合い方
5年しかもたない最高のシステムとの向き合い方
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907
 
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
 
Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기Node.js API 서버 성능 개선기
Node.js API 서버 성능 개선기
 
エフェクトにしっかり色を付ける方法
エフェクトにしっかり色を付ける方法エフェクトにしっかり色を付ける方法
エフェクトにしっかり色を付ける方法
 
スマホゲームのUI仕様書
スマホゲームのUI仕様書スマホゲームのUI仕様書
スマホゲームのUI仕様書
 

Similar to Chunked encoding を使った高速化の考察

DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
sairoutine
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!デベロッパーネットワーク
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
leverages_event
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニアヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
Isamu Suzuki
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphone
dena_study
 
ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCDハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD
翔新 史
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
Yoshiki Shibukawa
 
まだまだ戦えるweb!mithril.js最初の1歩
まだまだ戦えるweb!mithril.js最初の1歩 まだまだ戦えるweb!mithril.js最初の1歩
まだまだ戦えるweb!mithril.js最初の1歩
Keisuke Mori
 
Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術kazuya noshiro
 
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
Shoei Takamaru
 
Chrome拡張で改善 表紙
Chrome拡張で改善 表紙Chrome拡張で改善 表紙
Chrome拡張で改善 表紙
Wataru Terada
 
Dockerを2週間触ってみて気づいたこと
Dockerを2週間触ってみて気づいたことDockerを2週間触ってみて気づいたこと
Dockerを2週間触ってみて気づいたこと
Ishikawa Shogo
 
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
Yasuhito Yabe
 
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Kazuho Oku
 
A frameハンズオン 20170129
A frameハンズオン 20170129A frameハンズオン 20170129
A frameハンズオン 20170129
Youichi Sugii
 
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
Insight Technology, Inc.
 
新しいWEBフロントの開拓.pptx
新しいWEBフロントの開拓.pptx新しいWEBフロントの開拓.pptx
新しいWEBフロントの開拓.pptx
Ryo Higashigawa
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたDrecom Co., Ltd.
 
Multiple apk for Density
Multiple apk for DensityMultiple apk for Density
Multiple apk for Density
Tazake
 
お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術
KeitoTakeda
 

Similar to Chunked encoding を使った高速化の考察 (20)

DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
 
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニアヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphone
 
ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCDハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
 
まだまだ戦えるweb!mithril.js最初の1歩
まだまだ戦えるweb!mithril.js最初の1歩 まだまだ戦えるweb!mithril.js最初の1歩
まだまだ戦えるweb!mithril.js最初の1歩
 
Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術Unity開発で週イチ呑み会を支える技術
Unity開発で週イチ呑み会を支える技術
 
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
 
Chrome拡張で改善 表紙
Chrome拡張で改善 表紙Chrome拡張で改善 表紙
Chrome拡張で改善 表紙
 
Dockerを2週間触ってみて気づいたこと
Dockerを2週間触ってみて気づいたことDockerを2週間触ってみて気づいたこと
Dockerを2週間触ってみて気づいたこと
 
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
 
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
 
A frameハンズオン 20170129
A frameハンズオン 20170129A frameハンズオン 20170129
A frameハンズオン 20170129
 
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
 
新しいWEBフロントの開拓.pptx
新しいWEBフロントの開拓.pptx新しいWEBフロントの開拓.pptx
新しいWEBフロントの開拓.pptx
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみた
 
Multiple apk for Density
Multiple apk for DensityMultiple apk for Density
Multiple apk for Density
 
お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術
 

More from Yoshiki Shibukawa

技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
Yoshiki Shibukawa
 
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
Yoshiki Shibukawa
 
Golang tokyo #7 qtpm
Golang tokyo #7 qtpmGolang tokyo #7 qtpm
Golang tokyo #7 qtpm
Yoshiki Shibukawa
 
Mithril
MithrilMithril
Go & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and ErrorsGo & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and Errors
Yoshiki Shibukawa
 
Excelの話
Excelの話Excelの話
Excelの話
Yoshiki Shibukawa
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangFINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
 
アンラーニング
アンラーニングアンラーニング
アンラーニング
Yoshiki Shibukawa
 
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
Yoshiki Shibukawa
 
Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Yoshiki Shibukawa
 
大規模JavaScript開発
大規模JavaScript開発大規模JavaScript開発
大規模JavaScript開発
Yoshiki Shibukawa
 
Xpjug基調lt2011
Xpjug基調lt2011Xpjug基調lt2011
Xpjug基調lt2011
Yoshiki Shibukawa
 
Expert JavaScript Programming
Expert JavaScript ProgrammingExpert JavaScript Programming
Expert JavaScript Programming
Yoshiki Shibukawa
 
JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会Yoshiki Shibukawa
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」Yoshiki Shibukawa
 
つまみぐい勉強法。その後。
つまみぐい勉強法。その後。つまみぐい勉強法。その後。
つまみぐい勉強法。その後。Yoshiki Shibukawa
 
Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30
Yoshiki Shibukawa
 

More from Yoshiki Shibukawa (20)

技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
 
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
 
Golang tokyo #7 qtpm
Golang tokyo #7 qtpmGolang tokyo #7 qtpm
Golang tokyo #7 qtpm
 
Mithril
MithrilMithril
Mithril
 
Go & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and ErrorsGo & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and Errors
 
Excelの話
Excelの話Excelの話
Excelの話
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangFINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
 
アンラーニング
アンラーニングアンラーニング
アンラーニング
 
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
 
Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014
 
大規模JavaScript開発
大規模JavaScript開発大規模JavaScript開発
大規模JavaScript開発
 
Xpjug基調lt2011
Xpjug基調lt2011Xpjug基調lt2011
Xpjug基調lt2011
 
Expert JavaScript Programming
Expert JavaScript ProgrammingExpert JavaScript Programming
Expert JavaScript Programming
 
JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会
 
Pomodoro technique
Pomodoro techniquePomodoro technique
Pomodoro technique
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 
Bitbucket&mercurial
Bitbucket&mercurialBitbucket&mercurial
Bitbucket&mercurial
 
つまみぐい勉強法。その後。
つまみぐい勉強法。その後。つまみぐい勉強法。その後。
つまみぐい勉強法。その後。
 
Erlang and I and Sphinx.
Erlang and I and Sphinx.Erlang and I and Sphinx.
Erlang and I and Sphinx.
 
Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30
 

Recently uploaded

論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 

Recently uploaded (15)

論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 

Chunked encoding を使った高速化の考察

  • 1. Copyright © DeNA Co.,Ltd. All Rights Reserved. chunked encoding を使った高速化の考察 東京Node学園26時限目 2017/6/28 渋川よしき
  • 2. Copyright © DeNA Co.,Ltd. All Rights Reserved. 新刊でました! ■ 初版を買うなら今がチャンス!今すぐ本屋へ ■ ブラウザなどの通信まわり(JSとかCSSを 除く)のいろいろなトピックを思いつく限り 集めました ■ ブラウザ(利用者)視点で説明するようにして います。
  • 3. Copyright © DeNA Co.,Ltd. All Rights Reserved. ■ ウェブ系の話題で、 「だよねーわかるわかる…」 と分かったふりをしたことがある人に オススメ! ■ アニメについて詳しくなりたい人は 弊社のハッカドールをご利用ください
  • 4. Copyright © DeNA Co.,Ltd. All Rights Reserved. 今日の発表はReal World HTTP を読んでいる前提で進めます
  • 5. Copyright © DeNA Co.,Ltd. All Rights Reserved. その前に
  • 6. Copyright © DeNA Co.,Ltd. All Rights Reserved.
  • 7. Copyright © DeNA Co.,Ltd. All Rights Reserved.
  • 8. Copyright © DeNA Co.,Ltd. All Rights Reserved. Mithrilの最新動向も気になりますよね!
  • 9. Copyright © DeNA Co.,Ltd. All Rights Reserved. Mithril 1.xのバージョンアップについて
  • 10. Copyright © DeNA Co.,Ltd. All Rights Reserved. Mithril 0.2.x ■ 少ないAPI ■ 小さなダウンロードサイズ ■ 仮想DOMを使った高速な描画 ■ イベントハンドラと通信のコールバックを活用した描画タイミング制御
  • 11. Copyright © DeNA Co.,Ltd. All Rights Reserved. Mithril 0.2.x : 21関数、2プロパティ ■ コア ⁃ m() ⁃ m.component() ⁃ m.prop() ⁃ m.withAttr() ■ ラウティング ⁃ m.mount() ⁃ m.route(elem, defualt, routes) ⁃ m.route(path, params, replaceHistory) ⁃ m.route() ⁃ m.route(element) ⁃ m.route.mode ⁃ m.route.param ⁃ m.route.buildQueryString() ⁃ m.route.parseQueryString() ■ データ ⁃ m.request() ⁃ m.deferred() ⁃ m.sync() ■ HTML ⁃ m.trust() ■ レンダリング ⁃ m.render() ⁃ m.redraw() ⁃ m.redraw.strategy() ⁃ m.startComputation() ⁃ m.endComputation() ■ テスト ⁃ m.deps()
  • 12. Copyright © DeNA Co.,Ltd. All Rights Reserved. Mithril 1.x : 14関数、2プロパティ ■ コア ⁃ m() ⁃ m.component() ⁃ m.prop() ⁃ m.withAttr() ■ ラウティング ⁃ m.mount() ⁃ m.route(elem, defualt, routes) ⁃ m.route(path, params, replaceHistory)→m.route.set() ⁃ m.route()→m.route.get() ⁃ m.route(element)→m.route.link() ⁃ m.route.mode→m.route.prefix ⁃ m.route.param ⁃ m.route.buildQueryString()→m.buildQueryString() ⁃ m.route.parseQueryString()→m.parseQueryString() ■ データ ⁃ m.request() ⁃ m.deferred() ⁃ m.sync() ■ HTML ⁃ m.trust() ■ レンダリング ⁃ m.render() ⁃ m.redraw() ⁃ m.redraw.strategy() ⁃ m.startComputation() ⁃ m.endComputation() ■ テスト ⁃ m.deps() ■ 追加 ⁃ m.fragment() ⁃ m.version
  • 13. Copyright © DeNA Co.,Ltd. All Rights Reserved. Mithril 1.xはマジキチ ■ 機能が減った ⁃ 関数の数が21→14 ⁃ ファイルサイズも減った ⁃ deferredがES6標準のPromiseに移行 ⁃ 描画タイミングコントロールなんて必要なかった ⁃ プロパティは外部に切り出されてちょっとリッチなストリームになった ■ 高速化したらしい ■ 設計のガイドラインからビューモデルが消えた ⁃ ドキュメントからビューモデルの文字が消えさった ■ ライフサイクルメソッドが整理された ■ なお、マイグレーションスクリプトで変換はほぼ自動でいける ⁃ http://mithril-ja.js.org/change-log.html#migrating-from-v02x
  • 14. Copyright © DeNA Co.,Ltd. All Rights Reserved. Mithril 1.xを活かす設計 ■ 仮想DOMのパフォーマンス・チューニングがしやすく ⁃ 仮想DOMの内部設計がドキュメント化された。コードも読みやすい。 ■ コンポーネントは表示に特化 ⁃ ラウターリゾルバーを使ってデータ取得をコンポーネントの外に移動で きるように ■ データ取得部分はモデルに ⁃ ビューモデルの役割もモデルにマージ ⁃ ただ、通信の最適化とかこのあたりは今後革新がありそう (Mithrilにかぎらず、React、Vue、Riot、Angularとかでも) ■ 終了アニメーション ⁃ ライフサイクルメソッドがPromiseを返せる。終了を遅延できる。 ⁃ 0.2.xでは力技で実現するのは大変だった。
  • 15. Copyright © DeNA Co.,Ltd. All Rights Reserved. ドキュメント(http://mithril-ja.js.org/)は翻訳済み
  • 16. Copyright © DeNA Co.,Ltd. All Rights Reserved. 本もあるよ! ■ オライリーの電子書籍です ■ 0.2.x準拠 ■ 前ページの項目の差分に気をつけながら お読みいただければ ⁃ ビューモデルもモデルの一部に ⁃ 描画タイミングの制御はなくなった ⁃ モデル取得の司令はラウターリゾルバーに 持っていく方がたぶん良い ■ 精神的な部分は互換性があります! ■ そろそろ改訂したい気持ちがあります
  • 17. Copyright © DeNA Co.,Ltd. All Rights Reserved. chunked encoding を使った高速化の考察 東京Node学園26時限目 2017/6/28 渋川よしき
  • 18. Copyright © DeNA Co.,Ltd. All Rights Reserved. Transfer-Encoding: chunked ■ Real World HTTP P119を開いてください ■ Transfer-Encoding: chunked ■ HTTP/1.1で追加された機能 ■ ボディを細切れにして転送する ⁃ 最初にContent-Lengthで全体の長さを送らない ⁃ チャンクサイズ(16進数)と、その長さのボディという組を何回かに分 けて送る ⁃ 最後に長さゼロを送ると終了 ⁃ ボディサイズを最初に決めなくてもいい
  • 19. Copyright © DeNA Co.,Ltd. All Rights Reserved. 質問: Transfer-Encoding: chunked を普段から意識していますか?
  • 20. Copyright © DeNA Co.,Ltd. All Rights Reserved. 有効回答数: 19
  • 21. Copyright © DeNA Co.,Ltd. All Rights Reserved. 有効回答数: 19 半数以上の人があまり意識してい ない
  • 22. Copyright © DeNA Co.,Ltd. All Rights Reserved. 普段は意識しなくてもいい ■ どのプログラミング言語のHTTPクライアントAPIも、勝手に結合してくれる ■ bodyをストリームのようなAPIで読み込むと、場合によってはチャンクごとに 返ってくるかも? ■ 大抵HTTPクライアントを書く時は、JSONとかの細切れにパースできないデー タが欲しいだろうから、末尾までまるっと読み込みますよね?
  • 23. Copyright © DeNA Co.,Ltd. All Rights Reserved. SSRは本当に早いのか? ■ SSRを使うと初回ロードが高速になるっていうけど ⁃ 本当に高速なの? ⁃ Node.jsのイベントループに負荷をかけるしスケールするか疑わしい(キ ャッシュしないと) ■ 最近のウェブのデータ量は大きい ⁃ JSも数100KB ⁃ CSSもでかい ⁃ 画像も多い。全部で数MBはある。
  • 24. Copyright © DeNA Co.,Ltd. All Rights Reserved. HTTP リクエスト リクエスト 受信 DB アクセス HTML レンダ リング HTML パース 初回表示されるまでの流れ ファイル 転送 アセット リクエスト 表示
  • 25. Copyright © DeNA Co.,Ltd. All Rights Reserved. HTTP リクエスト リクエスト 受信 DB アクセス HTML レンダ リング HTML パース 初回表示されるまでの流れ ファイル 転送 アセット リクエスト 表示 表示するにもいろいろ情報を集め る必要がある HTMLパースをするまで 必要なJS/CSS/画像がわからない リクエスト開始が遅い 実際にはここが一番支配 的になるはず CSS→画像も読み込まな いと必要なファイルが分 からない
  • 26. Copyright © DeNA Co.,Ltd. All Rights Reserved. chunked encodingを使うアイディア ■ HTMLを読み込まないと必要なリソースがわからない・・・ ⁃ <script>タグと<link>タグ部分だけ先に読み込ませてしまえばいいのでは? ■ 期待する結果 HTTP リクエスト リクエスト 受信 DB アクセス HTML レンダ リング HTML パース ファイル 転送 アセット リクエスト 表示 HTML パース 高速化
  • 27. Copyright © DeNA Co.,Ltd. All Rights Reserved. ■ 実験してみた:その1 ⁃ すみません。Goで書きました。 ⁃ HTTP/2を使っています。 ⁃ HTMLはまずヘッダーを返し、末尾のコンテンツは4秒後に返した ⁃ リソースはJS、async付きJS、defer付きJS、CSSの4種類を読み込み。サーバ ー側で、2秒に返信と6秒後に返信の2パターン8通り返してみた ⁃ コードはこちら
  • 28. Copyright © DeNA Co.,Ltd. All Rights Reserved.
  • 29. Copyright © DeNA Co.,Ltd. All Rights Reserved. 即座にヘッダー部だけ返し、 残りは4秒後に返している
  • 30. Copyright © DeNA Co.,Ltd. All Rights Reserved. サーバーリクエストはその瞬間に スタートしている(レスポンスは サーバー側で2-6秒ブロック)
  • 31. Copyright © DeNA Co.,Ltd. All Rights Reserved. スの<script>タグと<link>のスタイ ルシートの読み込みがブロックに なっていて、完了すると表示され る
  • 32. Copyright © DeNA Co.,Ltd. All Rights Reserved. ■ 実験してみた:その2 ⁃ すみません。Goで書きました。 ⁃ HTTP/2を使っています。 ⁃ HTMLはまずヘッダーを返し、末尾のコンテンツは4秒後に返した ⁃ リソースはJS、async付きJS、defer付きJS、CSSの4種類を読み込み。 サーバー側で、2秒に返信と6秒後に返信の2パターン8通りのうち、6秒間 ブロッキングするJSとCSSを抜いた6パターンでアクセス ⁃ コードはこちら
  • 33. Copyright © DeNA Co.,Ltd. All Rights Reserved.
  • 34. Copyright © DeNA Co.,Ltd. All Rights Reserved. ブロッキングするJS/CSSが終わっ たこの段階(2秒後)で表示が開始 されている(この時点で読み込み 済みのCSSは利用される
  • 35. Copyright © DeNA Co.,Ltd. All Rights Reserved.
  • 36. Copyright © DeNA Co.,Ltd. All Rights Reserved. 後半のチャンクが到着したら再度 画面更新 window.addEventListener('load')イ ベントは最後のチャンクまで呼ば れたら実行される。
  • 37. Copyright © DeNA Co.,Ltd. All Rights Reserved. 実験成功 ■ 先に返したヘッダー部分をパースしてChromeは必要なリクエストを取得した ⁃ chunked-encodingは高速化に使える ■ ドキュメントのロードイベントは全HTMLの読み込みが終わってから実行 ⁃ 先にJSをロードしても、documentオブジェクトがまだないので何も表示 もできなかった ■ アセットの種類によって優先度が変わっている ⁃ スの<script>タグだとhigh ⁃ <link>のCSSファイルはhighest ⁃ async/defer付きの<script>タグはlow ■ 優先度が高いアセットはダウンロード完了するまで表示がストップ
  • 38. Copyright © DeNA Co.,Ltd. All Rights Reserved. ・・・実はHTTP/2では ■ chunked-encodingなんてものはありません→ ■ HTTP/2では各ファイルごとにストリームができる ⁃ ストリームは擬似的なTCPコネクション ⁃ ストリームには、データ片がフレームという単位で送信される ⁃ HEADERSフレーム(ヘッダー)やDATAフレーム(ボディ)などがある ⁃ 各ストリームを構成するフレームは終了ビットを立てない限りは同じ種 類のフレームを連続して送信できる 終了ビットの立ってないDATAフレームを断続的に送信することで chunked-encodingと同じことが実現できる!!! GoのAPIは同じFlusherインタフェースでHTTP/1.1と2の両対応 RFC 7540 : Section 8.1 HTTP/2 uses DATA frames to carry message payloads. The "chunked" transfer encoding defined in Section 4.1 of [RFC7230] MUST NOT be used in HTTP/2.
  • 39. Copyright © DeNA Co.,Ltd. All Rights Reserved. 実はこの手法 ■ オライリーの続・ハイパフォーマンスWebサイト にも書いてありました。 ⁃ 第12章: ドキュメントのフラッシュ ■ やってみたらHTTP/2でもまだ有効というのが 今回の収穫 ■ ダウンロードのアセット間のブロッキングが 当時とは違って行われないことがわかりました ⁃ HTTP/2にすればアセットの順序とか考えずに トップスピードでダウンロード
  • 40. Copyright © DeNA Co.,Ltd. All Rights Reserved. それ以外の高速化のアイディア ※一部妄想です
  • 41. Copyright © DeNA Co.,Ltd. All Rights Reserved. HTTP/2時代のスクリプトの配布は? ■ 分割されたファイルをそのまま配信する方が良い ⁃ ファイル片ごとにキャッシュが効くので二回目以降のメリットが大きい ■ webpack/browserify/rollupとかは不要になる? ⁃ たぶんならない ⁃ tree shakingでファイルサイズ削減はあって損はないはず ⁃ npmとか余計なファイル入りまくりなのでそのままデプロイとか辛い ⁃ 単純にソースコードのままだと、子・孫のファイル取得に時間がかかる ⁃ 途中までは既存のバンドルツールと同じ処理をするが、最後にファイル 結合しないで、必要なすべてのファイルのimport文を並べたエントリー ポイントスクリプトファイルを生成するようになるのでは? 誰か作って!
  • 42. Copyright © DeNA Co.,Ltd. All Rights Reserved. ボディをServer Side Renderingしないアイディア ■ 完全なSPAでは、JSのロードが終わってから、そのJSがサーバーにリクエスト を送るため、データのロードが開始するのが後ろ倒しになる ⁃ 結果として表示に時間がかかる ■ 前倒しにできないか? ⁃ 完全なHTMLのレンダリングをせずに、インラインJSタグを使ってJSONを 埋めむとか ⁃ あるいは、インラインのスクリプトはCSPでひっかかる可能性があるので いっそのこと/data.jsみたいなJSを読み込むようにして、そのスクリプト を動的生成するとか? • 安全なJSONP ■ SSRが速度に効くというの、JSライブラリがでかすぎただけでは? ⁃ MithrilとかMoon.jsを使えば初回表示も操作開始も爆速にできないか? ⁃ あとはchunked-encodingを使ってJSロードを早めればさらに高速に
  • 43. Copyright © DeNA Co.,Ltd. All Rights Reserved. まとめ ■ chunked-encodingでダウンロード速度改善はHTTP/2時代にも有効 ■ アセットが巨大化していく時代にあっては効果が大きい ⁃ SSRをして、初回HTML生成までリードタイムが長い場合に 一番効果が大きそう ⁃ SSRしないけど、JSONを埋め込んでSPAの手法で高速化するときも有効 ■ chunked-encodingとかHTTP/2のフレームあたりの詳しい説明が知りたい方は Real World HTTPっていう本に書かれているらしいですよ!