Chrome Dev Summit 2014 - ランタイム パフォーマンスの応用サイエンス

カードの乗っ取り効果

昨年末に Chrome Dev Summit のサイトを構築しました。Material Design は優れたデザイン言語であり、私が作りたいサイトにぴったりだと思ったので、このデザインを採用しました。しかし、新しいデザイン言語には、他の言語と同様に、疑問点、課題、決定事項があり、特にウェブの慣例を扱う場合はその傾向が顕著です。

特に作成が難しかったのは、カードをクリックしたときに表示される「テイクオーバー」効果です。

このような効果を 60 fps で実行するには、いくつかの検討、プロトタイピング、興味深い妥協が必要でした。Chrome Dev Summit で、この効果について説明し、その作成方法を詳しく説明しました。

高性能アニメーションの構築

パフォーマンスの高いアニメーションは、少なくとも現時点では、ブラウザのコンポジタを優先するアニメーションです。変換プロパティと不透明度プロパティの変更に限定すれば、通常は優れたパフォーマンスが得られます。カード アニメーションで採用した一般的なアプローチは、まさにそれです。

  1. カードが折りたたまれたときに、カード内のすべての要素の位置を測定します。
  2. カードのクラスを切り替えて展開します(アニメーションなし)。
  3. カードが展開されたので、カード内の要素の位置を再測定します。
  4. 差を計算します。
  5. 負の変換を適用して、要素を開始位置に戻します。
  6. アニメーションをオンにします。
  7. 負の変換を削除すると、要素が画面上の最終位置に移動します。

これらはすべてコストがかかるように聞こえるかもしれませんが、ユーザーが操作してからアニメーションを開始するまでの時間は 100 ミリ秒です。これを超えると、ユーザーは遅延を感じます。この時間を利用して、アニメーション自体をより安価に実行できるように、コストのかかる準備作業を行うことができます。また、50 ~ 100 ミリ秒程度のクリーンアップ作業を行うためのウィンドウもあります。これは、実行しようとしている処理によっては便利です。

アニメーションの認識ウィンドウ。

アニメーションの実行に必要な処理は最初の 100 ミリ秒以内に行われ、Nexus 5 では 70 ミリ秒程度で完了するため、余裕があります。

コードを取得する

サイトの詳細を確認したい場合は、コードが GitHub で公開されていますので、ぜひご覧ください。