<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>アニメーション &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/アニメーション/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>Webアニメーションを高速化するために知っておくべき10のこと（後編）</title>
		<link>/cssradar/2669/</link>
		<pubDate>Thu, 26 Sep 2013 22:00:07 +0000</pubDate>
		<dc:creator><![CDATA[斉藤 祐也]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[アニメーション]]></category>
		<category><![CDATA[パフォーマンス]]></category>

		<guid isPermaLink="false">/?p=2669</guid>
		<description><![CDATA[連載： パフォーマンスチューニング (8)前編から引き続き、後編でも最適化のために知っておきたいレンダリングプロセス、計測方法、そして最適化を妨げるよくあるアクシデントとその回避方法について紹介していきます。 アニメーシ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/performance-tech/" class="series-149" title="パフォーマンスチューニング" data-wpel-link="internal">パフォーマンスチューニング</a> (8)</div><p><a href="https://html5experts.jp/cssradar/2027/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">前編</a>から引き続き、後編でも最適化のために知っておきたいレンダリングプロセス、計測方法、そして最適化を妨げるよくあるアクシデントとその回避方法について紹介していきます。</p>

<h2>アニメーションを高速化するために知っておきたいレンダリングプロセス</h2>

<p>ブラウザがどのようにウェブサイトを表示しているのかを知ることは、アニメーションだけに限らず、Webのパフォーマンス全体の高速化を行うために大切なステップです。
イスラエルの開発者であるTali Garsiel氏が公開した『<a href="http://taligarsiel.com/Projects/howbrowserswork1.htm" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">How Browsers Work</a>』は、<a href="http://www.html5rocks.com/en/tutorials/internals/howbrowserswork/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Rocksに転載</a>され、複数の日本語訳も提供されている、ブラウザの内部動作を学ぶために読んでおきたいリソースの1つです。
そのリソースを参考に、レンダリングエンジンのメインフローについて見ていきましょう。</p>

<p>ブラウザはまずHTMLドキュメントを解析し、HTMLタグをコンテント・ツリーと呼ばれるDOMノードに変換します。そして外部CSSやスタイル要素に含まれるスタイルに関するデータを解析し、レンダーツリーを作成します。<br />
このレンダーツリーが色や大きさのような情報を持つ矩形を持っています。 </p>

<p>ここから先が特にアニメーションのパフォーマンスに関わりの深いフローになりますが、レンダーツリーが作成された後、レイアウト(リフロー)と呼ばれるプロセスに入り、そしてペイントがそれに続きます。</p>

<p>ここでは非常に大まかな流れしか解説しませんが、Paul Irish氏が言うとおり、ブラウザがHTMLやCSSを画面に表示するまでのフローを理解することは、開発におけるベストプラクティスの背後にある根拠を理解する手助けとなります。少々慣れない用語が多いかもしれませんが、ぜひ先ほど紹介した記事を一読ください。</p>

<h2>アニメーション・ボトルネック: レイアウト(リフロー)</h2>

<p>Google ChromeやSafariなどのWebKit系ブラウザではレイアウト、FirefoxなどのGecko系ブラウザではリフローと呼ばれるプロセスは、パフォーマンス向上において大きな障害となるプロセスの1つです。<br />
Satoshi Ueyama氏が<a href="http://gyu.que.jp/sjs2007/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">2007年に『出張 Shibuya.js 24』にて発表した</a>際に使用した以下の動画で見ることができます。様々な大きさの矩形が徐々に配置されていくプロセスがレイアウト/リフローです。</p>

<p><a href="http://youtu.be/ZTnIxIA5KGw" title="Gecko Reflow Visualization" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Gecko Reflow Visualization</a></p>

<p>このレイアウトのプロセスを、どのように最小限に抑えることができるかが、アニメーションの高速化において大切なポイントになります。
レイアウトを引き起こす原因について、詳しくはTony Gentilcore氏による「<a href="http://gent.ilcore.com/2011/03/how-not-to-trigger-layout-in-webkit.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">How (not) to trigger a layout in WebKit</a>」を参考にしてください。<br />
記事のタイトルにもある通り、あくまでWebKit系ブラウザのみに限定されていますし、2011年の記事でもありますので、必ずレイアウトの発生を確認できるツールを利用して確認することをおすすめします。<br />
（執筆時点ではGoogle Chrome、Safariの開発者ツール、そして紹介記事から得た情報でしかありませんが、IE11の開発者ツールでもレイアウトの発生を確認できます）</p>

<h2>アニメーション・ボトルネック:ペイント</h2>

<p>やや乱暴ではありますが、ブラウザで何かを表示するということは、HTMLやCSSから得た情報を画像化して表示しているのと大きな差はないと言えます。　</p>

<p>CSS3がプロダクションレベルで利用されはじめた今、角丸やシャドウなどを画像を利用せずに表現することが当たり前になってきているかと思います。読み込む画像が少なくなれば、その画像を制作するコストも減り、画像の読み込みにかかるコストも減りますが、その代わりにブラウザがそのコストを背負ってくれているわけです（もちろん1対1の割合ではありませんが）。<br />
この後の段でアクシデントとして紹介しますが、すべてのスタイルが同じコストでペイントを行うわけではなく、また組み合わせによってコストが甚大になるケースもあるので注意が必要になります。</p>

<p>ブラウザは、表示領域をいくつかのタイルとしてレンダリングを行います。それぞれの個別のタイルごとにレンダリングをし、その結果をキャッシュしていきます。<br />
そのため、大きな領域でペイントを行うことを避ける必要があります。レイアウトと同様に、ペイントを行う範囲を最低限にしておくことがポイントになります。</p>

<h2>アニメーションのパフォーマンスの計測、デバッグツール/ワークフロー</h2>

<p>パフォーマンス最適化において、最も大事なことは計測することです。私自身もよく陥る失敗ですが、どこかで読んだから、以前はうまく回避できた問題だからと盲目的にそれらの情報を頼りにするのではなく、計測する方法をきちんと学び、計測を日々続けることがベストプラクティスです。</p>

<p>開発者ツールについての詳しい記事は今後本サイトで紹介される予定ですので、ここでは私が実際にアニメーションのパフォーマンスについて計測するのに利用しているツールとワークフローを、ほんの一部ですが紹介していきます。</p>

<p>パフォーマンス計測を行う上で欠かすことができないのが、Google Chrome Canaryの開発者ツールです。Chromeではなく、日々更新を続けていくCanaryを利用する理由は、計測ツールとしての機能の多さと深さがChromeとは異なるからです。</p>

<p>アニメーションの最適化という文脈においてタイムラインパネルは、エディタとブラウザの描画エリアと同じくらい見る画面です。 </p>

<p><img src="/wp-content/uploads/2013/09/devtool1.png" alt="devtool" width="668" height="425" class="aligncenter size-full wp-image-2803" srcset="/wp-content/uploads/2013/09/devtool1.png 640w, /wp-content/uploads/2013/09/devtool1-300x190.png 300w, /wp-content/uploads/2013/09/devtool1-207x131.png 207w" sizes="(max-width: 668px) 100vw, 668px" /></p>

<p>まずは上図の1、Framesタブに切り替えて、上図2のRecordボタンをクリックし、計測を行いたいアニメーションを実行します。 </p>

<p><img src="/wp-content/uploads/2013/09/devtool.recording.gif" alt="devtool.recording" width="896" height="491" class="aligncenter size-full wp-image-2671" /></p>

<p>すると、上図のような棒グラフが記録されていきます。その下にある表は棒グラフをより詳細にしたものです。<br />
棒グラフは、背が高ければ高いほど処理に時間がかかっているということになります。計測対象にもよりますが、グラフ上にある2本の線は30FPSと60FPSを示しています。60FPSを目指すのであれば、それ以上の高さになっている棒グラフの周りをドラッグすることで、下にある表にその選択したタイミング内の詳細情報を表示させることができるようになります。</p>

<p>表にある横グラフは、マウスオーバーさせることでその特定の処理についての詳細を見ることができます。<br />
レイアウトやペイントがどの範囲で行われているか、そしてそれにかかっている時間がどのくらいか、などの情報を確認することが可能です。<br />
これらの情報と最前にも紹介したレンダリングの仕組みの情報を踏まえて、トライアル&amp;エラーを繰り返し、最適化を図っていくのが大まかなワークフローとなります。</p>

<h2>アニメーションを遅くするよくあるアクシデント</h2>

<p>最後にアニメーションのパフォーマンス最適化を妨げる、よくある3つのアクシデントを紹介します。</p>

<p>1つ目は<a href="https://html5experts.jp/cssradar/2027/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">本連載の前編</a>でも少し触れたGPUにまつわるアクシデントです。<br />
GPUを使ってRenderLayerを作成し、そのレイヤー上でアニメーションを行うことそのものはベストプラクティスと言えます。しかしCPUからGPUへのデータ転送にはコストがかかり、特にモバイルデバイスなどCPUもGPUも非力である場面で問題になります。</p>

<p>この問題については、Phamtom.jsの作者としてよく知られるAriya Hidayat氏によるデモが非常にわかりやすいです。デモそのものは<a href="http://codepen.io/ariya/full/xuwgy" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらのcodepen</a>で実際に動作しているので、参考にしてください。 </p>

<p><a href="http://vimeo.com/75182001" title="Ariya Hidayat氏によるGPUへのデータアップロードデモ" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Ariya Hidayat氏によるGPUへのデータアップロードデモ</a></p>

<p>それぞれのボックスの右上に数字があり、カウントされているのが確認できたでしょうか？　このカウントがCPUからGPUへのデータの転送数を示しています。このデータ転送が少ないほうがパフォーマンスはよくなります。<br />
ですが、実際にデータ転送を行わないプロパティは非常に少なく、Ariya Hidayat氏によれば、opacity、transform、filterの3つのみと言われています。<br />
アニメーションの表現としてデータ転送が回避できない場面が多いのも事実ですが、同時にデータ転送には相応のコストがかかることを知っておくことも大切です。</p>

<p>GPU関連でもう1つの落とし穴があります。GoogleのJake Archibald氏による<a href="http://jsbin.com/efirip/5/quiet" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">デモ</a>をご覧ください。 </p>

<p><img src="/wp-content/uploads/2013/09/accidental.layer_.creation.gif" alt="accidental.layer.creation" width="1200" height="660" class="aligncenter size-full wp-image-2672" /></p>

<p>オレンジ色の矩形が、GPUによって処理されるComposited Layerを示しています。実際にComposited Layerを生成したかったのは左上の緑のボックスだけなのにも関わらず、どういうわけか見出しにもComposited Layerが生成されてしまいます。デスクトップ上であれば、このComposited Layerの生成にかかるコストは気にするほどのことでもありませんが、モバイルデバイスにおいては大きなコストになってしまいます。<br />
この問題を回避するのにはシンプルな解決があります。</p>

<p>先ほどのデモ内においてはアニメーションする要素そのものに、z-index: 1を付与することで回避できます。<br />
このアクシデントは、カルーセルのようなUIパターンによく見られます。自作する際も、すでにあるライブラリを利用する際も、思っていない場面でComposited Layerが生成されていないか確認し、z-indexを使って回避できるか試してみてください。</p>

<p>Ariya Hidayat氏によるW3Confでのプレゼンテーション『<a href="http://www.youtube.com/watch?v=gTHAn-nkQnI" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Fluid User Interface with Hardware Acceleration</a>』はハードウェア・アクセラレーションを使った最適化を行うのにあたり、見ておくべきリソースの1つです。またThe Chromium Projectsにてドキュメントされている<a href="http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GPU Accelerated Compositing in Chrome</a>も参考になりますので、ぜひ一読してください。</p>

<p>ここで紹介する最後のよくあるアクシデントが、CSSプロパティの組み合わせによるペイントコストの増大です。このアクシデントはモバイルデバイスでよく見かけるものです。例えば、角丸とシャドウを組み合わせたボックス、非常によくあるスタイルにも関わらず、これらのスタイルがあると、とたんにスクロールが引っかかるように感じてしまうことがあります。この「引っかかる感じ」の原因の多くがペイントです。</p>

<p>どのプロパティの組み合わせがどれくらいのペイントコストとなるかを計測するためのツールは存在はしますが、ここでは紹介しきれませんので割愛します(チャレンジしてみたい方は<a href="http://dev.chromium.org/developers/how-tos/trace-event-profiling-tool" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらのドキュメント</a>を参考にしてください。また取得方法は異なりますが、Colt McAnlis氏によるHTML5 Rocksの記事『<a href="http://www.html5rocks.com/en/tutorials/speed/css-paint-times/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CSS Paint Times and Page Render Weight</a>』も合わせて参考にしてください。)。しかし前段で紹介したタイムラインパネルでもペイントコストを確認できますので、トライ&amp;エラーを繰り返すことで、最適化を進められるでしょう。</p>

<p>前後編にわたってWebアニメーションの最適化について紹介してきました。<br />
いずれブラウザや端末そのものも賢くなり、これらの知識やテクニックも早晩時代遅れになっていくだろうと思います。しかし、我々はその過渡期にいる最中です。「使いやすさ」を向上する上で欠かすことができない最適化は多くの苦難があっても報われるものです。</p>
]]></content:encoded>
		
		<series:name><![CDATA[パフォーマンスチューニング]]></series:name>
	</item>
		<item>
		<title>Webアニメーションを高速化するために知っておくべき10のこと（前編）</title>
		<link>/cssradar/2027/</link>
		<pubDate>Thu, 12 Sep 2013 22:00:53 +0000</pubDate>
		<dc:creator><![CDATA[斉藤 祐也]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[アニメーション]]></category>
		<category><![CDATA[パフォーマンス]]></category>

		<guid isPermaLink="false">/?p=2027</guid>
		<description><![CDATA[連載： パフォーマンスチューニング (7)アニメーション／トランジションは身の回りに当たり前にあるものです。 むしろ普段の生活では「0」が「1」に変化するものの方が珍しいでしょう。 アニメーション／トランジションはデジタ...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/performance-tech/" class="series-149" title="パフォーマンスチューニング" data-wpel-link="internal">パフォーマンスチューニング</a> (7)</div><p>アニメーション／トランジションは身の回りに当たり前にあるものです。<br>
むしろ普段の生活では「0」が「1」に変化するものの方が珍しいでしょう。<br>
アニメーション／トランジションはデジタルなWebに対して自然な変化を提供する大切なツールです。<br>
今回はそんなアニメーション／トランジションをより自然にスムーズに動作させるために知っておきたいことを前・後編の2回に分けて紹介していきます。</p>

<p><span id="more-2027"></span></p>

<h2>アニメーションを高速化する理由</h2>

<p>アニメーションは先ほど書いたように普段の生活にも存在しています。だからこそ、我々はスムーズではないアニメーションを見つけるのが得意です。</p>

<p>アニメーションに限定した話ではありませんが、FacebookのShane O&#8217;Sullivan氏が、ページロード後のレンダリングパフォーマンスが一定でない場合は「いいね！」や「シェア」などのアクション率が低下すると、昨年Londonで開催されたEdge Conferenceで話していました。</p>

<p><img src="/wp-content/uploads/2013/09/edgeconf-performance-300x158.png" alt="edgeconf-performance" width="300" height="158" class="aligncenter size-medium wp-image-2028" srcset="/wp-content/uploads/2013/09/edgeconf-performance-300x158.png 300w, /wp-content/uploads/2013/09/edgeconf-performance-207x109.png 207w, /wp-content/uploads/2013/09/edgeconf-performance.png 480w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p>特にモバイルデバイスは触って操作するだけあって、ユーザが無意識に自分の感覚と近いものを求めることは当然とも言えるでしょう。</p>

<h2>アニメーションの速さを計る「FPS」について</h2>

<p>これまでパフォーマンスを計る単位はページロード速度を計るミリ秒が主でしたが、最近ではページロード後のレンダリングやアニメーションのパフォーマンスを計る単位としてフレームレート(単位時間あたりいくつフレームが処理されるかを表す単位)が利用され始めていて、WebにおいてはFPS(Frames Per Second)、つまりフレーム/秒という単位で表すのが一般的です。</p>

<p>ここでいう「フレーム」は映画などで指す「コマ」と同じものと考えて差し支えないでしょう。例えば映画の世界では24FPSが標準的に使われていて、Webにおいては60FPSがたどり着くべき目標とされています。</p>

<h2>JavaScriptとCSSではどちらがアニメーションに最適なのか？</h2>

<p>Web上でアニメーションを表現するには多くの方法がありますが、ここではJavaScriptとCSSを使った手法にフォーカスします。  </p>

<p>CSS3を使ってのアニメーションの以前はJavaScriptによる実装しか選択肢がありませんでした。jQueryの.fadeIn()や.slideUp()などを使ったアニメーションの実装の経験は多くの人が持っているでしょう。</p>

<p>Web開発におけるすべての問題への正しい解答はいつだって「時と場合による」ものですから、どちらが最適かという問いに対する答えも同じです。しかし、本誌の<a href="https://html5experts.jp/yoshikawa_t/1016/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ユーザーの体感速度を高めるためのJavaScriptチューニング（後編）</a>にある通り、JavaScriptはシングルスレッドで動作するもので、JavaScriptがアニメーションを行っている間はそれ以外の処理を行うことができません。  </p>

<p>JavaScriptは現在のWebサイト/アプリにおいて非常に多くの処理を行う傾向にあるため、CSS3にその処理を代わって実行させることができるようになったことは、パフォーマンス観点では大きな一歩と言えるでしょう。 </p>

<p>しかしCSS3のアニメーションを使ったからといって、60FPSの目標を自動的にクリアできるものでは決してありません。</p>

<h2>ハードウェア・アクセラレーションは銀の弾丸ではない</h2>

<p>CSS3を使ったアニメーション実装が進むにつれ、思った以上にパフォーマンスが出ない場合にハードウェア・アクセラレーションを強制的に利用するテクニックが紹介され始めました。  </p>

<p>ブラウザが行う処理はこれまでCPUで行ってきましたが、アニメーションをスムーズに実行するにはGPU(グラフィックス プロセッシング ユニット)を使う方が効率的です。</p>

<p>ハードウェア・アクセラレーションを利用すると言った場合、端的に言ってしまえば、transform: translate3d(0,0,0)あるいは、transform: translateZ(0)という3Dに関連するプロパティを追加すると、実際に値がゼロであってもブラウザはGPUを利用し、そうすることでアニメーションがスムーズに実行される。というように解説されることが多いです。</p>

<p>どんなツール/テクニックにも当てはまることですが、得るものがあれば、必ず失うものもあります。ハードウェア・アクセラレーションを利用することで得られることは、GPUが得意とするグラフィック処理を行うレイヤーを生成(後述)し、そのレイヤー上で処理が完結できること、そして失うものはそのレイヤーを生成し、管理するコストです。</p>

<p>例えば、ハードウェア・アクセラレーションが効果的だからと言って、body * { transform: translateZ(0) } というような記述をすると、本来であればレイヤーが必要ない要素に対してもレイヤーを生成してしまうことになります。これはレイヤーを生成し、管理するためのメモリを余分に費やすことになり、サイト全体で見るとパフォーマンスが低下してしまうことになります。</p>

<p>ハードウェア・アクセラレーションは必要なタイミングで必要な要素にだけ利用するようにするべきです。また、transform: translateZ(0)というような記述でブラウザにハードウェア・アクセラレーションさせるのはあくまでもハックとして考えておいた方がいいでしょう。ブラウザのアップデートとともにハックが利用できなくなるかもしれません。</p>

<h2>CSSのプロパティによってアニメーションのパフォーマンスはどう変わるのか</h2>

<p>ハードウェア・アクセラレーションはtransform: translateZ(0)だけで利用できるようになるわけではありません。  </p>

<p>例えば、ある要素の位置をA地点からB地点に移動させるアニメーションを実装する際に:</p>

<ol><li>transform: translate()を利用する</li><li>position:absoluteで要素の位置を指定しtopやleftの値を利用する</li></ol>

<p>というケースが考えられます。  </p>

<p>Paul Irish氏はこの<a href="http://www.paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">2つケースを実装し、両者のパフォーマンスを比べています</a>。  </p>

<p><img src="/wp-content/uploads/2013/09/Why-moving-elements-with-translate-is-better-than-pos-abs-top-left-Paul-Irish-300x158.png" alt="Why moving elements with translate   is better than pos abs top left   Paul Irish" width="300" height="158" class="aligncenter size-medium wp-image-2029" srcset="/wp-content/uploads/2013/09/Why-moving-elements-with-translate-is-better-than-pos-abs-top-left-Paul-Irish-300x158.png 300w, /wp-content/uploads/2013/09/Why-moving-elements-with-translate-is-better-than-pos-abs-top-left-Paul-Irish-207x109.png 207w, /wp-content/uploads/2013/09/Why-moving-elements-with-translate-is-better-than-pos-abs-top-left-Paul-Irish.png 480w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p>結論から言うと、1)のtransform: translate()を利用するほうがパフォーマンスはよくなります。  </p>

<p>Paul Irish氏は2)で実装する場合、アニメーションする要素はCPUを利用し、かつ敷かれている背景に対して移動する度に描画を行う必要があるのと比べて、1)の場合、要素はGPUが生成するRenderLayerと呼ばれる専用のレイヤー上を移動し、敷かれている背景などへの影響がないため、スムーズに移動することができると解説しています。</p>

<p>RenderLayerについてはブラウザの内部的な話になってしまうので、ここでは詳しくは触れませんが、2)のposition:absolute + top/leftを使った場合のアニメーションは、ブラウザを白い壁に例えると要素が移動するたびに要素を白く塗りつぶし、移動先に書き直す、というような処理になりますが、1)のtransform: translate()を使った場合は、白い壁に透明のシート(RenderLayer)を被せ、そのシート上に要素を描くことで、移動はシートを動かすだけで実現できるようになる、という様に考えてみるとわかりやすいでしょう。もちろんアニメーションによってはRenderLayerが得意な表現だけを利用できるわけではありませんし、あくまでも現時点のブラウザの仕様に依存する部分も多くあります。 </p>

<p>次回後編ではレンダリングプロセス全体について簡単に解説し、アニメーションのボトルネックとなるレイアウトとペイントの2つのプロセスについて、そして、より詳しい計測、デバッグのワークフロー、最後によくあるアクシデントと回避方法について紹介します。</p>
]]></content:encoded>
		
		<series:name><![CDATA[パフォーマンスチューニング]]></series:name>
	</item>
	</channel>
</rss>
