繰り返されるオブジェクトを 1 つ選択して測定します
一定期間同じ発射パターンを発射する繰り返し可能なシーンを構築します。プールを導入する前に、ブラウザのプロファイリング ツールを使用してフレームの動作と割り当てアクティビティを観察します。その後、発射体の数と動作を一定に保ちながら、同じシーンを比較します。測定された問題が、コストのかかる描画、イメージ デコード、または衝突作業である場合、オブジェクトの再利用ではその原因には対処できません。 MDN は、JavaScript は自動的にオブジェクトを割り当て、ガベージ コレクションを使用するため、プールは必須の最適化ではなく、テストするための設計オプションであると説明しています。
非アクティブ状態が単純なオブジェクトを一種類だけプールします。発射物は、アリーナから出るか壁に当たった後にプールに戻る場合があります。進化する段階を伴う長く生き残るボス敵は、あまり適切ではありません。最大プール サイズまたは定義されたオーバーフローの選択肢を設定して、バーストが制限なくプールをサイレントに拡大できないようにします。
アクティベーションとリセットを完了する
アクティブ化時に、新しいリクエストから位置、速度、有効期間、衝突フラグ、所有者、および視覚的な状態を設定します。非アクティブ化すると、アクティブな衝突リストと描画リストからエンティティが 1 回だけ削除されます。古い不透明度を持つプールされたパーティクルは、間違った位置でフラッシュする可能性があります。以前の所有者を保持している発射体は、以前のソースにスコアを与えることができます。リセット ロジックを 1 つの関数に保持し、すべての変更可能なフィールドをリストします。
テストの再利用、枯渇、シーンのクリーンアップ
同じスロットを数回起動、非アクティブ化、再利用し、すべてのプロパティが新しく初期化された例と一致することを確認します。意図的にプールを使い果たし、選択したポリシーを確認します。ルールが許可する方法で一時オブジェクトを割り当てたり、装飾効果を削除したり、ゲームプレイ イベントを制限したりします。シーンに出入りして、古いラウンドからプールされたエンティティが新しいラウンドでアクティブのままにならないようにします。
オブジェクトプーリングブラウザゲームについての質問
オブジェクト プーリングは常に JavaScript ゲームを高速化しますか?
いいえ、管理作業が追加され、実際に影響を及ぼしているボトルネックを解決するだけです。反復可能なシーンの前後を測定し、プールによって有用な結果が得られずに複雑さが増す場合は、より単純な割り当てパスを維持します。
最も一般的なプール リセットのバグは何ですか?
再利用されたオブジェクトは、速度、有効期間、所有者、可視性など、以前のフィールドを保持します。アクティブ化とリセットを一元管理し、テストで繰り返し再利用します。
関連情報
古い情報を見つけましたか? 訂正を連絡