以下のコードでは、変数 diff を使用して、粒子の目標位置と実際の位置の差を格納しています。その値をローカルの「var diff」に保存すると、メモリ割り当てが増えません。関数の外で宣言されたグローバルな「var diff」を使用するか、宣言を完全に省略して使用すると、膨大なメモリ割り当てが表示されます。グローバル変数を使用すると巨大な割り当てが発生するのはなぜですか?
私は作業を残しましたが、コードはコメントされていません。
余談ですが、グローバルに作成された場合、以下のパーティクル変数は割り当ての量を変更しません。どちらの場合も、コードは必要なタスクを実行します。
Chrome バージョン 30.0.1599.101 m でテスト済み
コード:
//Could also declare global for diff or particle out here with no change.
LoadingScreen.prototype.Update = function(delta)
{
var size = this.totalParticles - 1;
while(size--)
{
//Works perfectly
var particle = this.particleSystem.geometry.vertices[size];
//Also works perfectly with no extra allocations.
/* particle = this.particleSystem.geometry.vertices[size]; */
if(size >= this.row)
{
//Works perfectly
var diff = particle.gridy - particle.y;
//Causes huge memory allocations garbage collection and the like
/* diff = particle.gridy - particle.y; */
if(diff < 5 * delta)
particle.y = particle.gridy;
else
if(particle.y != particle.gridy)
particle.y += 500 * delta;
}
}
this.row = this.totalParticles * (loadStatus.left / loadStatus.total);
...
};