Block Rockin’ Codes

back with another one of those block rockin' codes

ハイパフォーマンス ブラウザネットワーキング書評

Intro

執筆段階から、 Web で無料閲覧できた High Performance Browser Networking が、紙の本として出版され、その翻訳本が完成したということで、献本を頂きました。

原著には本当にお世話になったし、 HTML5Experts.jp で書いた Make the Web Faster の連載でもよく参考にした本なので、日本語で読めるようになったのは非常にありがたいですね。

本当はレビュアの依頼を頂いたのですが、色々あって他の方に振ったりしてしまったので、せめて全力で書評させていただきます。

Make the Web Faster

ところで、 GoogleMake the Web Faster というプロジェクトを持っているのをご存知でしょうか? この “Make the Web Faster” のページには、文字通り Google が 「Webを速くするため」に開発したプロダクトや、新しい仕様の提案、ベストプラクティスなどがリストされています。

具体的には以下の様なものが上がっています。

見ると、それぞれ仕様だったり、プロダクトだったり、サービスだったりと粒度は違います。 もちろん、ページ内ではもう少し整理されていますが、これらはレイヤの上から下まで、 Google が「Web を速くするため」にやってきたことが全て集約されているためです。

Web のパフォーマンスといえば「ハイパフォーマンス Web サイト」という書籍があります。 この本では、 Web のフロントエンド寄りのエンジニアに対して、サイトを構築する上でのノウハウをいくつかのプラクティスにまとめ、それを紹介しています。

この本の初版が 2008 年に出版され、その 2 年後には「続編」が倍のページになって出版されました。 その理由には以下の様なものが見て取れます。

  • Web に求められるパフォーマンスの要件が、刻々とシビアになった。
  • Web に求められるユースケースが、文書閲覧にとどまらず、ゲームなども含め格段に増えた。
  • 右肩上がりと目されていたエンド帯域が、モバイルの普及によって一旦下がった。
  • パフォーマンスチューニングするための選択肢が、格段に増えた。

この変化に対して、包括的に適切な対策をするのは、決して簡単なことではありません。 そこで、 Google はこうした変化に対する適切な対策についてノウハウを構築し、合わせてツールやライブラリ、 Google がホストするサービス、新しい仕様としての提案などとしてリリースし、 それを積み上げたのが "Make The Web Faster" なのです。

Ilya Grigorik

Ilya は、今は Google の Developers Advocate (俗にいうエヴァンジェリスト的なポジション) として、この Google が培ったパフォーマンスのプラクティスや、ツール・サービスの紹介を含めた啓蒙活動をしています。(元々は Google Analytics かなんかでエンジニアをやっていたはず)

そのため Google I/OYoutubeChrome Developers のチャネルなどでも度々登場し、 Make The Web Faster にあるようなパフォーマンスに関するありとあらゆるレイヤの話をしています。 日本にも一度、 Google Page Speed あたりの話をしに来日していました。

彼が凄いのは、ネットワークに係る本当に全てのレイヤについてキチンと理解しており、さらにコード(Ruby)も書けてデプロイもできる優秀な技術者だということです。(しかも確かすごく若い)

この本の冒頭には、先に述べた 「ハイパフォーマンス Web サイト」の筆者である Steve Souders の Forward(前書き) が寄せられています。

“Good developers know how things work. Great developers know why things work.”
「良い開発者はどのように動作するかを知っている、素晴らしい開発者はなぜ動作するかを知っている。」

そして Steve は Ilya が殆ど全てのレイヤについて、「どのように動作し」、「なぜ動作するのか」を知っているエンジニアであり、この本は、 Ilya が最先端のネットワークの基礎と最新の進化を、「なぜ動作するのか」まで書き下ろした本であると紹介しています。

ハイパフォーマンス "ブラウザ" ネットワーキング

Web というレイヤで開発をしていれば、 "HTTP" つまり Layer7 のアプリケーション層だけ知っていれば十分かというと、そうでないだろうことはハイパフォーマンス Web サイトなどを通じて、 ある程度一般に認識されたものかと思います。

なぜなら、それらをキチンと分かっていないと、複雑なアプリを、複雑なネットワーク環境に乗せて、多様なユーザに適切なパフォーマンスで提供することはもはや不可能だからです。

では、実際にどの程度の範囲で知識を持っていれば良いのかというと、難しいところです。 TCP/UDP の基本的な知識はもちろん、近年では Wifi やモバイルのネットワークについての知識も必要かもしれないし、アプリのレイヤでも HTTP だけではなく WebSocket や WebRTC なども出てきています。

この本は、「ブラウザ」という文字が入っており、実際にブラウザをインタフェースとした時に関わる、 Web 開発者が知っているべき技術のほとんどが紹介されています。ちなみに日本語版のサブタイトルは「ネットワークアプリケーションのためのパフォーマンス最適化」となっていますが、原著のサブタイトルは以下です。

"What every web developer should know about networking and web performance"
「ネットワークとパフォーマンスについて、全ての Web 開発者が知るべきこと」

その通り、各技術は「どのように動作するのか?」という API の話と合わせて、「なぜ動作するのか?」という Protocol のレベルまで解説されています。 また、観点として「パフォーマンス」を意識した解説がされており、ベストプラクティスやチューニングの観点、ものによっては計算の方法などが載っており、章末には「パフォーマンスチェックシート」が付録される構成になっています。 速度的なパフォーマンスだけでなく、モバイルの章ではバッテリの消費などにまで言及されているあたりからも、網羅性を見て取れると思います。

範囲としても、 TCP(TCP-FO や SlowStart の話も) や UDP(NAT トラバーサルも) の本当に基礎の部分から、 WebSocket(subprotocol 含む) や WebRTC(TrickleICE まで) など、プロトコルの基礎から最新動向まで紹介されています。

もちろん、現在策定中の HTTP2 についても紹介されており、SPDY から続く HTTP 改善の歴史や、設計の方針などについて解説されています。 (章だてが HTTP2.0 となっているのからもわかるように、 Draft こそ少し古いですが、読んだところ HTTP2 の概念を理解する上では十分に最新な記述だったと思います)

これからの Web 開発の現場では、参照したくなる場面が必ず増えていくと思うので、少なくともまだ 原著は Web で無料で見られる ことは知っておいて損は無いでしょう。

そして、それが翻訳されて日本語で読めることに 4000 円の価値が見いだせるなら、是非手元に置いておくことをおすすめします。

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化

Outro

この本は、これからの Web パフォーマンスについて言及する際に、かなりの確立でリファレンスされることになるでしょう。 この本が日本語で読めることには、とても価値があると思います。

翻訳者の方、ならびに短い時間でレビューをこなしたレビュアの方々、本当にお疲れ様でした。

Jxck