(重複していたら申し訳ありませんが、そうではないと思います)
ご存知のように、私は Google Chrome 29.0.1547.66 m を使用しています。
現在、40 x 100 タイルのタイル張りの「千鳥状」マップを構築するKineticJSプロジェクトが進行中です。マップのレンダリングには約 500 ミリ秒かかりますが、これは問題ありません。4000 個のタイルすべてが1 つのレイヤーに配置されました。
それが完了したら、ステージをドラッグしようとしますが、一度に 4000 個のタイルすべてを移動しようとするため、パフォーマンスが非常に低下します。160 ミリ秒の CPU 時間について話しています。
他の人が示唆したように、各行を個別のレイヤーに分割しようとしましたが、各レイヤーを個別に移動する必要があったため、さらに悪化しました ( 620 ミリ秒の CPU 時間)。
私は JavaScript が得意とは言えませんが、ドラッグのパフォーマンスを改善する方法がわかりません。
レイヤー全体をキャッシュ するか、何かが機能する可能性がありますか?
これまでのプロジェクトには非常に多くのコードが含まれているため、スニペットのみを示します。
//Stage Object
window.stage = new Kinetic.Stage({
container: element,
width: 800,
height: 600,
draggable: true
});
//Map Loop for create and position tiles
var tempLayer = map.addLayer(); //makes a new layer and adds it to stage etc.
for (var y = 0; y < height; y++) { //100 tiles high
for (var x = width-1; x > -1; x--) { //40 tiles wide
var tileImg = map._tiles[mapArray[x][y]-1]; //map._tiles is just an array of Kinetic.Image objects
if (typeof(tileImg) != "undefined"){
var tileClone = tileImg.clone();
map.place(x, y, 0, tileClone, tempLayer); //places tile in world scope positions
}
}
}
tempLayer.draw();
パフォーマンスを改善する方法を見つけられない場合、誰もこれを実行できず、プロジェクトをビニングする必要があるため、すべての考えを歓迎します! ありがとう!