1

開発中の Web アプリで CSS3 キーフレーム アニメーションをいくつか試しています。独自のカスタム アニメーションとanimate.cssによって提供されるアニメーションの両方を試しました。結果は同じです。アニメーションは正常に動作しますが、しばらくすると、ブラウザを放っておくと、CPU 使用率が約 100% に達し、そこにとどまります。そのプロセスを強制終了すると Web アプリが強制終了され、CSS アニメーションを削除すると問題が解消されるため、何が原因であるかは疑いの余地がありません。私は主に Chrome を使用していますが、これまで問題が発生していました。

Web アプリのターゲット プラットフォームには、Phonegap 経由の iOS と Android、node-webkit 経由の Windows と OSX が含まれます。私が説明した問題は、モバイル Safari では発生しないようですが、他のプラットフォームではどうでしょうか? これはキーフレーム アニメーションの一般的な問題ですか? これを回避するためのトリックはありますか?

編集:デモ リンクを追加しましたが、問題を再現できません。完全なアプリでは、AngularJS、Angular-UI、Angular-UI-router、Fastclick、Animate.css などの多くのライブラリとフレームワークを使用しています。言うのは難しいですが、アプリからアニメーションを削除すると、100% の CPU 使用率の遅延も解消されました。

HTML:

<button id="start">Start</button> <button id="reset">Reset</button>
<br/>
<div id="ball" class="ball"></div>

Javascript:

document.getElementById('start').addEventListener('click', function(e) {
    document.getElementById('ball').classList.add('remove');
});

document.getElementById('reset').addEventListener('click', function(e) {
    document.getElementById('ball').classList.remove('remove');
});

CSS:

.ball {
    width:100px;
    height:100px;
    border-radius:100px;
    background-color:darkred;
    position:absolute;
    top:100px;
    left:200px;
}

@-webkit-keyframes slide {
    from { top:100px; left:200px; }
    to { top:100px; left:-100px; }
}

.remove {
    animation: slide 1s linear;
    -webkit-animation: slide 1s linear;
    -webkit-animation-iteration-count: 1;
    -webkit-animation-fill-mode: forwards;
}
4

3 に答える 3

3

-webkit-animation-fill-mode: forwardsChrome で最初のテストを行っているという私の疑いが正しければ、100% の CPU 使用率の原因は宣言によるものです。

Werckerの記事と私自身の調査によると、Chrome の現在のバグのようです (バージョン 30.0.1599.101 でテスト済み) 。

このアニメーションでは、アニメーション キーフレームと -webkit-animation-fill-mode: forwards を使用します。サイドバーがアニメーションの最後のフレームからの位置を保持するようにします。アニメーションは通常、再生が終了すると元の設定に戻ります。

これは私たちにとっては素晴らしいことですが、Chrome にとってはそうではありません。-webkit-animation-fill-mode: forwards; を使用した CSS アニメーション。100% の CPU 負荷のバグを引き起こしています。実際には、CSS アニメーションが終了し、タブが非アクティブになったときにのみ発生します。

これは、Chromium プロジェクト ページのこの問題によって裏付けられているようです。

Lindsey Bateman が記事で述べているように、このバグは Chrome Beta と Chrome Canary (33.0.1706.0 canary) で修正されているため、現在の Chrome にこれを導入するのにそれほど時間はかかりません。

于 2013-11-11T22:44:08.767 に答える
1

すべての拡張機能を無効にすることで問題を解決しました。どちらが責任を負ったかはまだ調査されていません。これらは容疑者です:

  • AngularJS バタラン 0.4.3
  • アバスト!オンライン セキュリティ 8.0.1500
  • カラージラ 0.5.4
  • HootSuite ブートレット 4.0.10
  • iGetter 2.9.2
  • インテル® XDK 2.6.1
  • リップル エミュレーター (ベータ) 0.9.15
  • Xmarks ブックマーク同期
于 2013-12-06T20:38:09.353 に答える