translateZ(0)に関連するCSSパフォーマンス


96

多くのブログが、transform: translateZ(0)アニメーションとトランジションを高速化するためにを使用して、要素が3Dであると考えるようにGPUを「トリック」することでパフォーマンスの向上を表現しています。この変換を次のように使用することに意味があるかどうか疑問に思っていました。

* {
    -webkit-transform: translateZ(0);
    -moz-transform: translateZ(0);
    -ms-transform: translateZ(0);
    -o-transform: translateZ(0);
    transform: translateZ(0);
}

6
それらのブログ記事にリンクできますか?
ユルゲンポール

@PineappleUndertheSeaこれ:blog.teamtreehouse.com/…ここに送ってくれました。

ところで、-o-transform: translateZ(0)物事はありませんでした。caniuse.com/#search=translate3d
Volker E.

@Ahmed Nuamanはい、それは単なるトリックではありません。ただし、一部のアプリでは公式に使用されています。しかし、GPUが搭載されていないデバイス(ローエンド)になってしまった場合...パフォーマンスがよくわかりません。しかし、プロセッサにできること(2Dグラフィックス)がGPUに委任されている場合、最終的な影響はありませんが、3Dコマンドがあるだけの理由です。また、3Dは内部で複数のコアを使用し、より高速に動作します。これはここで意味をなすものです。さらに調査が必要です...
TooGeeky 2017

回答:


102

CSS変換は、仕様で説明されいるように新しいスタックコンテキストと包含ブロックを作成します平易な英語では、これは、変換が適用された固定位置の要素が絶対位置の要素のように機能し、z-index値がねじ込まれる可能性があることを意味します。

このデモを見てみると、私の意味がわかります。2番目のdivには変換が適用されています。つまり、新しいスタックコンテキストが作成され、疑似要素が下ではなく上にスタックされます。

だから基本的には、そうしないでください。最適化が必要な場合にのみ、3D変換を適用します。-webkit-font-smoothing: antialiased;これらの問題を発生させずに3Dアクセラレーションを活用するもう1つの方法ですが、Safariでのみ機能します。


27

意味を知りたい場合は、ハードウェアアクセラレーションを有効にすると、一部のシナリオでGoogle Chromeのパフォーマンスがひどくなります。奇妙なことに、「トリック」を-webkit-transform: rotateZ(360deg);うまく機能するように変更します。

私たちはなぜその理由を理解したとは思わない。


3
Safari 5および6でmax-heightを使用すると、スクイーズされた画像やアニメーションがひどく間違っているなどの問題がありました。GPUアクセラレーション(translateZ(0))を無効にすると、すべてが意図したとおりに機能しましたが、アニメーションが十分にスムーズではありませんでした。translateZ(0)をrotateZ(360deg)に変更したところ、突然アニメーションがスムーズになり、ハードウェアアクセラレーションが行われ、問題はなくなりました。
jakub_jo 2015年

14

これにより、ブラウザはハードウェアアクセラレーションを使用してデバイスのグラフィックプロセッシングユニット(GPU)にアクセスし、ピクセルを飛行させます。一方、Webアプリケーションはブラウザのコンテキストで実行されるため、ソフトウェアがレンダリングの大部分(すべてではないにしても)を実行できるため、トランジションの処理能力が低下します。しかし、Webは追いついてきており、ほとんどのブラウザーベンダーは、特定のCSSルールによってグラフィカルなハードウェアアクセラレーションを提供しています。

を使用-webkit-transform: translate3d(0,0,0);すると、GPUがCSSトランジションの動作を開始し、スムーズになります(FPSが高くなります)。

注: translate3d(0,0,0)表示内容に関しては何もしません。オブジェクトをx、y、z軸で0px移動します。これは、ハードウェアアクセラレーションを強制する手法にすぎません。

ここをよくお読みください:http : //www.smashingmagazine.com/2012/06/21/play-with-hardware-accelerated-css/


7

私はそれ-webkit-transform: translate3d(0, 0, 0);が新しいposition: -webkit-sticky;特性を台無しにするという事実を証明することができます。私が作業していた左側のドロワーナビゲーションパターンで、transformプロパティで必要なハードウェアアクセラレーションが、上部のナビゲーションバーの固定位置を混乱させていました。トランスフォームをオフにすると、ポジショニングはうまくいきました。

幸い、-webkit-font-smoothing: antialiasedhtml要素を使用していたため、ハードウェアアクセラレーションは既に有効になっているようです。私はiOS7とAndroidでこの動作をテストしていました。


5

モバイルデバイスですべてをGPUに送信すると、メモリが過負荷になり、アプリケーションがクラッシュします。CordovaのiPadアプリでこれに遭遇しました。必要なアイテムのみをGPU、つまり具体的に移動しているdivに送信することをお勧めします。

さらに良いのは、3D トランジション変換を使用して、left:50pxではなく、translateX(50px)のようなアニメーションを実行することです。


1
「3Dトランジションを使用する」ではなく「3Dトランスフォーメーションを使用する」という意味ですか?
Isius
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.