Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

プリンより滑らか。スムーズなアニメーションの作り方

7,272 views

Published on

HTML版: http://people.mozilla.org/~bbirtles/pres/html5j-2015/
2015年1月25日HTML5 Conferenceプレゼンの資料です。
ブラウザーについての知識を深めながら、快適に動くウェブアニメーションの作り方を学びましょう。最新の技術によって、もっと上手にブラウザーの機能を活かしませんか?
Youtube: https://www.youtube.com/watch?v=nA7Fq-kiryY

Published in: Internet
  • Be the first to comment

プリンより滑らか。スムーズなアニメーションの作り方

  1. 1. アニメーションによってこのような素晴らしい作品が作れます。
  2. 2. もっと真面目な使い方もある、らしいです。 例えば、この図は分かりにくいでしょう。
  3. 3. アニメーションを使うとだいぶ分かりやすくなります。
  4. 4. Hans Rosling氏のTED Talkは非常に面白いです。 多量のデータを把握するため、アニメーションが大変役に立ちます。 簡単に言えば、アニメーションというものは時間を通して、情報を伝えることです。
  5. 5. ユーザーインターフェースにも、アニメーションによって 情報を伝えることができます。
  6. 6. OSXのGenie効果によって、最小化されたウィンドウはどこ に行っちゃったかとすぐ分かります。
  7. 7. Firefoxにもアニメーションが同様に使われています。
  8. 8. しかし、アニメーションがカクカクして しまうとユーザーがイライラするし、 伝えたい情報が失われます。 ウェブアプリを作る際、どうやって パフォーマンスを保証しますか? 何よりも、ブラウザーがその背後に何を やっているかという理解が必要です。
  9. 9. 滑らかなアニメーションができるように、マークアップからユーザーの目 までの間にブラウザーが行っている過程を最適化しに行きましょう。
  10. 10. URLを開くと、コンテンツをが読み込まれ、 DOMツリー(コンテンツツリー)が建てられます。 しかし、この過程がアニメーションに与える影響が 低いですので次のスタイル仕組みに進みましょう。
  11. 11. レイアウト・描画するために、DOMツリーにスタイ ルを適用して、レンダーツリーを建てます。
  12. 12. スタイル決定という過程によってレンダーツリーを 作ります。しかし、フレーム(CSS box)の高さ、配置 などはまだ決まっていません。
  13. 13. レイアウトという過程によると フレームの配置などを計算します。 コンテンツによってこの過程は重 いです。
  14. 14. どれほど重いかとタイムラインによって計ることができます。
  15. 15. Chrome IE
  16. 16. Firefoxではリフロー(レイアウト)が コンソールで表示されています。
  17. 17. 例えば、margin-leftのアニメーションだと 毎回リフローが行われています。
  18. 18. この同じテストケースを他のブラウザーで見ると、異なることがありますが、 transformならどのブラウザーでもリフローしません。ということは、 transformを使うとアニメーションがもっと滑らかになるでしょう。
  19. 19. この2つの過程が重いですので、 ブラウザーができるだけスタイルの 処理を避けます。 必要なときまで待ちます。
  20. 20. しかし、APIによってはスタイルの処理をさせます。
  21. 21. このコードによると、プリンごとにスタイルを変えて、 そしてリフローをさせます。
  22. 22. 指定されたスタイルを使うとリフローはさせません。
  23. 23. レンダーツリーが建てられたら、描画ができます。
  24. 24. だいたい描画が一番重い過程です。
  25. 25. 描画を軽くすることは良いですが、 コンテンツによっては完全に描画をスキップすることも可能です。
  26. 26. レーヤーはフォトショップなどのレーヤーみたいです。 ブラウザーが画像数枚を1回描画して、最後に全部を合成します。 合成するのにGPUが得意ですのでよくGPUにやってもらいます。 合成しながら幾何変換、透明度などを変えることができますので 再描画する必要はありません。
  27. 27. ブラウザーが自動的にレーヤーを作ってくれます。
  28. 28. スクリプトのアニメーションでも、ブラウザーによって自動的にレーヤー化されます。
  29. 29. アニメーションが始まるまでプリンがレーヤー化されません。
  30. 30. しかし、場合によってアニメーションが始まったら、レーヤー化するのはもう遅いです。
  31. 31. 端末またコンテンツによってはレーヤー化するのに時間がかかります。
  32. 32. このような場合にアニメーションがカクカクしないため、最近のブラウザー(例: Firefox 37以降)がアニメーションの開始時間を調整しますが、まだアニメーション の反応が遅いと見えます。できればレーヤー化を前もってやってほしいです。
  33. 33. will-changeを使うとあらかじめレーヤー化をするように ブラウザーにお願いすることができます。
  34. 34. レーヤーを使ってもブラウザーが忙しくなるとアニメーションが カクカクしてしまうことまだあります。
  35. 35. なぜかというと、 アニメーションが主要スレッドで動いていますので、 他の過程が忙しくなるとアニメーションする 余裕がなくなります。
  36. 36. しかし、レーヤーはだいたいコンポジターという別のスレッドで合成されていますので、 コンポジタースレッドでアニメーションができるとしたら、主要スレッドが忙しくなっても アニメーションが滑らかに進みます。
  37. 37. スクリプトのアニメーションなら、ブラウザーがそのアニメーションの 効果を把握していませんので、コンポジターに渡せません。
  38. 38. しかし、Web Animations APIを使うとコンポジターのアニメーション を作ることができます。
  39. 39. 現在、FirefoxでもWeb Animations APIが実装中です。 CSS Animations又CSS Transitionsをスクリプトから調整することができます。
  40. 40. Web Animations APIに基いて、最近アニメーションの開発ツールができました。
  41. 41. FirefoxでのWeb Animations API実装の進展。
  42. 42. ここまで学んだブラウザーについての知識を活かして、 どの端末上でも、どのブラウザー上でも、滑らかに動くアニメーションが作れます。

×