以下斜め読んだ内容

pseudo translation of useful posts, book reviews, remarks,etc. twitter: feeddict

Facebook Engineering「Every Millisecond Counts」

Facebook Engineeringのエントリ。
今回はfacebookの今年のインターンの一人(Zizzy@カーネギーメロン大)が書いてる

Every Millisecond Counts

サイトの速度とユーザーの動向を調べるというのがインターン中に手がけたプロジェクトらしい。
facebookで色々表示速度や表示方法を変えたりする実験結果から分かったことを色々報告するという主旨のエントリ

  • ページの速度に関わらずユーザの滞在時間は変わらない
  • PVと滞在時間が1.2倍になったチューニング

とか、色々データ付きで面白い。

以下斜め読んだ内容
  • 書いてる人
    • インフラチームに配属されたインターン君
  • 実験で取り組んだ問題
    • サイトの速度がユーザの行動へ与える影響の正確な把握
    • News Feedに表示するstoryの数の最適化
    • ページロード中に画面の表示の最適化
    • パフォーマンスと使いやすさはトレードオフかどうか
    • サイト/ページの変更が与ええる影響はヘビーユーザーとライトユーザーでどう違う?
    • サイトを構成しているファクターをいじると使い勝手とインタラクティブ性はどう変わる?
  • サイトの速度とPVの関係
    • 実験では、サイトの速度をミリセカンド単位で遅くして、ユーザーの動向へ与える影響を観察
    • わかったこと
      • サイトの速度に関わらずユーザーの滞在時間は同じ。
      • ページロード時間とユーザー当たりのPVは反比例。
        • ユーザー当たりのPVを増やしたいなら、ページロード時間を短縮すればいいことが分かった。
  • ロード時の最適な画面表示
    • 争点
      • プログレッシブレンダリングするか、jsのロード&イベントのセットを待ってからページ表示させるか
      • イベントのセット待ちにすると何も画面に表示させない時間が発生する
    • 実験結果
      • プログレッシブレンダリングに軍配
      • ブランク画面が表示されるほうは利用率が低下した。
  • News Feedの表示のチューニング
    • ホーム画面の「掲示板」(wall)タブで表示されるコンテンツのこと
    • facebookのえらいエンジニアがやったチューニング
      • 昔はstoryを30個ロード&表示してた
      • かなりページロードかかる
      • ユーザーのホーム(home.php)にロードされてるNew Feedは10以上読まれないことがデータから分かった。
      • Scroll Loadingの導入
        • 最初にロードされるstoryを半分の15にする。
        • あとはautopagerizeのような動作に。スクロールダウンされないとロードされない。
        • これによって、ユーザーのホームのロード時間は減少
        • 他方で、ユーザーエクスペリエンスが全く犠牲にならなかった。
    • インターン君がやったチューニング
      • Scroll Loadingをより効果的にする
      • スクロールダウンされるときにロードされる量を倍の30にした。
      • 変更の意図
        • スクロールダウン時に実行されるstoryのロード時間に対してユーザーが寛容であれば、home画面で表示できるstoryの量はもっと増やせる
        • home画面で表示されるstoryの数が増やせれば、storyが表示されるチャンスがアップする。
        • スクロールダウン時に実行されるstoryのロード時間にどの程度ユーザが寛容であるのかを実験して、データから判断
      • 実験結果
        • 成功。クリックされるstoryの数はアップ。
        • ライトユーザで、1.2倍PVアップし、1.2倍滞在時間増えた
        • ライトユーザ=全トラフィックの25%くらいを占める。
      • インターン君のチューニング実験は、すぐに正式にサイトへ採用になった。