まず第一に、 LinkedInEngineeringブログの優れた投稿を読んでください。それを注意深く読み、アプリケーションで試すことができる最適化があるかどうかを確認してください。それらすべてを試しても、それでもパフォーマンスの問題が解決しない場合は、読み進めてください。
ページに画像ギャラリーまたは雑誌スタイルのコンテンツ領域があると思います
この画像領域を別の場所に配置するのはiframe
どうですか?次にできることは次のとおりです。
- 2つのiframeがあります。1つだけが表示され、時間内にアクティブである必要があります。
画像を最初のiframeに読み込みます。ロードされた画像のサイズを追跡します。正確なサイズの追跡が難しい場合
numberOfLoadedImages * averageImageSize
かなり良い近似かもしれません。
- その数がしきい値に近づくと、現在表示されているコンテンツを2番目のiframeにプリロードし始めます。
- iframeの表示を反転して、2番目のiframeがアクティブになるようにします。
- 最初のフレームの内部コンテンツをクリアします。
- 必要に応じて手順全体を繰り返します。
これがうまくいくかどうかはわかりませんが、iPadのWebKitエンジンがフレームのメモリを個別にクリアすることを願っています。
編集:あなたがゲームを書いていることが判明しました。
ゲームの場合、同時に多くのゲームオブジェクトを画面に表示したいので、それらの一部を単純にアンロードすることはできないと思います。その場合のいくつかの提案があります:
- ゲームにDOMを使用しないでください。メモリが多すぎます。幸いなことに、あなたは
canvas
すでに使用しています。
- 画像をスプライトします。画像スプライトは、リクエストの数を減らすのに役立つだけではありません。また、
Image
オブジェクトの数を減らし、ファイルごとのオーバーヘッドを低く抑えることができます。IEブログcanvas
で、アニメーションにスプライトを使用する方法について読んでください。
- 画像を最適化します。画像用のファイルサイズオプティマイザはいくつかあります。SmushItはその1つです。あなたの画像のためにそれを試してみてください。YUIブログのStoyanStefanovによるこの素晴らしいシリーズで議論されている他のテクニックに注意を払ってください。
- ベクターグラフィックを試してください。SVGは素晴らしく、canvgはそれをキャンバスの上に描画できます。
- ゲームの世界を単純化してみてください。たぶん、いくつかの背景オブジェクトはそれほど詳細である必要はありません。または多分あなたはそれらのためのより少ないスプライトで逃げることができます。または、同じグループの異なるオブジェクトに画像フィルターとマスクを使用することもできます。Dave Newtonが言ったように、iPadは非常に制約のあるデバイスであり、比較的低品質のスプライトで逃げることができる可能性があります。
これらはすべて、ロードする必要のあるデータの削減に関連する提案でした。あなたのために働くかもしれない他のいくつかの提案。
- 必要になるイメージをプリロードし、不要になったイメージをアンロードします。ゲームに「レベル」または「ミッション」がある場合は、現在のスプライトにのみ必要なスプライトをロードします。
- 最初に「人気のある」画像を読み込んで、残りの画像をバックグラウンドで1回ダウンロードしてみてください。
<iframe>
メインのゲームループがダウンロードによって中断されないように、個別に使用できます。ダウンローダーフレームを調整するために、クロスフレームメッセージングを使用することもできます。
- 最も人気のある画像を、、に保存
localStorage
できApplication Cache
ますWebSQL
。それぞれ5MBのストレージを提供できます。これは、 15メガの永続キャッシュです。localStorage
とに型付き配列を使用できることに注意してくださいWebSQL
。また、これを操作するのApplication Cache
は非常に難しいことにも注意してください。
- ゲームをPhoneGapアプリケーションとしてパッケージ化してみてください。このようにして、ゲームをプレイする前にユーザーが大量のデータをダウンロードするのを防ぐことができます。ページを開くためだけに1回のダウンロードで200メガバイトを使用するのは多すぎます。ほとんどの人はそれを待つことすらしません。
それ以外は、画像でキャッシュを上書きするという最初の提案は実際に有効です。すぐにやらないでください。代わりに、ゲームのダウンロードサイズを減らす可能性を探ってください。