2014-10-06

@Scale conf 2014 web track: RxJS、flow型チェック、wikipediaとPHPなど

Facebookが主催する@Scale conferenceというカンファレンスが少し前にやってまして、そのビデオがYouTubeで公開されてます。Data、Mobile、Webというみっつのトラックがあって、それぞれプレイリストになってます。とりあえずWeb trackをざっと眺めたなかで個人的に面白いとおもったものを。

Asynchronous Programming at Netflix

非同期プログラミング、というタイトルでRxJS (Reactive Extension for JavaScript)の解説。語り口も明確だし、これは面白かった。イベントソースを非同期なコレクションとみなして、forEachやmapなどを駆使すると綺麗に書けますよ、Netflixではもう使ってます、というもの。

もともとReactive ExtensionはMS発祥のテクノロジーで、C#などではLINQとうまく統合しているみたいなんだけど、JSの場合は関数をチェインさせる。スピーカーはMSからNetflixに移った人らしい。チュートリアルもわかりやすく(前半はふつうの関数プログラミングのはなしなのでだるいが)、なかなか興味深い内容だった。

JavaScript Testing and Static Type Systems at Scale

前半はJSのモジュールの話とテストの話。あんまり真面目に聴いてないけど、ものすごい目新しい話ではなかったと思う。が、後半のFlowっていう型チェッカはちょっと面白かった。

JSに型チェックを入れるってのは、いくつか実例はあって、Closure Compilerとか、TypeScriptとか。ただ、Flowの型チェックがすごいのは、構文解析をしてJSコードの型チェックを理解して的確に間違いを検出する。プレゼンの例だと、
function size(input) {
  if (input != null) {
    return input.length;
  }  return 0;
}
とか、
function size(input: string | Array<string>): number {
  if (typeof input == "string") {
    return input.length;
  } else {
    for (var i = 0, sum = 0; i < input.length; i++) {
      sum += input[i].length;
    }
    return sum;
  }
}
とかを正しく型チェックできる……らしい。今年中にオープンソースにするってさ。

Migrating Wikipedia to HHVM

HHVMはFacebookがリリースしたPHPとHackっていう新言語用のVMで、WikipediaのPHPをHHVMに移行してパフォーマンスを改善させたっていう話。これは正直、HHVMがどんなもんで、どういう特性があって、みたいな技術的な側面を期待してたら、そのへんはあんまり言及がなくて肩透かし。ふつうにHHVMにしたら速くなりました、という感じ。

ただ興味深かったのは、なぜWikipediaがPHPのパフォーマンスを気にしないといけないか、ってこと。WikipediaはVarnishをつかってキャッシュをしていて、静的ページはかなりキャッシュにヒットする。PHPでなにをどうしようが、95%のリクエストには全く何の影響もない。ではなぜ、PHPのことを気にする必要があるのか?

PHPが影響するのは、キャッシュがきかない部分だ。たとえばページ編集時のプレビューはキャッシュできないから、PHPでパーズするしかないが、非常に多岐にわたる複雑な拡張機能のためにパーズはめちゃくちゃ遅くなるらしい。バラク・オバマの(英語の)ページで実験してたけど、旧来の普通のVMだとページ生成に20秒ぐらいかかるという。HHVMにしてみたらなんと6秒! いやそれでも遅いと思うけどね……。

また、Wikipediaではログインユーザのほうが平均的に遅くなる傾向があるという。

ようするに、Wikipediaに対する貢献度が高い、いわばプライオリティユーザーにむしろペナルティを与えてしまっている現状なのだ、と言う。だから、割合としては少なくても、きちんと気にしないといけないのだ、ということだそうです。

いじょ。mobileとdataのトラックも、まあヒマがあったら見てみます。