0

ここで初めて質問しましたが、このサイトは非常に役に立ちました。問題に対する答えが見つかりませんでした。

ご容赦ください。質問を提示する前に、十分に説明します:)

私は、デスクトップ上で実行される html5 ゲームと、アプリとしてのモバイル デバイスに取り組んでいます。

ゲームの一部で、一度にレンダリングされる 1500 x 1200 のキャンバスがあり、それは DOM のどこかに配置され、より小さな div 内に配置されます。これにより、その div 内でキャンバスをスクロールできます。

これは、デスクトップおよび iOS モバイルで非常にうまく機能します。しかし、Android ではうまく動作しません。パフォーマンスが低いということは、タッチが登録されるまでに 1 ~ 2 秒かかることを意味し、その後、指がスクロールするためにキャンバスが遅れます。

私は多くの調査と多くのテストを行いました:

-easeljs と関連するスクリプトを一時的にオフにすることでパフォーマンスを少し改善できましたが、アプリの残りの部分ではこれが必要です。- $(document) およびその他の要素からバインドを削除することで、さらにパフォーマンスが向上しました。それでも、Android のパフォーマンスは iOS やデスクトップに匹敵しませんでした。

最終的に、キャンバス要素が .removed() であり、代わりに html 'body' に追加されたときに、ほぼデスクトップのパフォーマンスが得られました。どうしてこれなの?もちろん、ゲームでこのようにすることはできませんが、このパフォーマンスの向上をどうにかして再現する必要があります。

さらにややこしいのがこちら。同じ Canvas 要素を再度削除して DOM 内の場所に追加すると、パフォーマンスの点でさらに優れています。タッチ入力の遅延が少なくなり、スクロールがよりスムーズになりました。誰かがヒントを与えたり、その理由を説明できますか?

この種の動作の考えられる原因は何ですか?

//編集: 私の質問に関する詳細な説明。要素をスクロールするときの Android での主要なパフォーマンス ヒットは何ですか? タッチで起動するイベントが多すぎますか? DOM の要素が深すぎますか? DOM の CSS が多すぎますか? EaselJS がうまく動作しませんか?

ありがとうございました

4

1 に答える 1

1

あなたの痛みが分かります。現時点ではほとんどが黒魔術なので、私にできる最善のことは、同様の経験を関連付けて提案することです。

  • DOM は、できるだけシンプルに保ちます。普段はきれいに保っています。別のレイアウトアプローチから残った不要な CSS ステートメントが原因で、あらゆる種類のスクロールの問題が発生しました。そのため、何かを変更するときはいつでも徹底的にクリーンアップしてください。

  • オーバーフローには十分注意してください。オーバーフローが原因で、最初の phonegap アプリで多くの問題が発生しました。何らかの理由で、Android は html 要素以外でのオーバーフローに苦労しています。これは固定位置に関連していると思いますが、Android <= 2 ではどちらも実行できませんでした (いいえ、非タグでのスクロールはありません - 真剣に)。また、パフォーマンスを低下させる冗長なオーバーフロー ステートメントもいくつかありました (前のポイントを参照)。

  • 実際の HTML タグでキャンバス要素をスクロールしてみてください。つい最近、アニメーション化されたキャンバス要素を、HTML 要素でスクロールするコンテンツからスクロールする div 要素のコンテンツに切り替えたところ、あなたが抱えている問題と非常によく似た問題に遭遇しました。ここで、古い方法に戻すことですべてが解決するかどうかを確認します。これでも私の本当の問題は解決しませんが、少なくとも問題を絞り込むことができます。

  • おそらく関連していませんが、スワイプの状況でスクロールする場合、あまりにも多くのスワイプライブラリがデフォルトの動作を無効にすることでスクロールのパフォーマンスを低下させます<event object>.preventDefault()

  • また、微調整中にモーメンタム スクロールの問題が発生した場合 (何かをフリックしても慣性がない)、webkit-overflow-scrolling-touch を参照して、iOS の問題を解決するのに役立つ修正を確認してください。これに関する1つのまともなリンクがあります:http://css-tricks.com/snippets/css/momentum-scrolling-on-ios-overflow-elements/

  • また、Android の Web ビュー キャンバスの実装は非常に悪く、スクロールはすべてのモバイル デバイスで驚くほど不快です。

于 2013-10-27T05:14:53.230 に答える