2012-05-08 15 views
2

私は非常にキャンバスに慣れているので、何か入力が必要です。パフォーマンスの問題KineticJS

私は約2k +長方形を処理する必要があるので、ライブラリの概要を作成することはできません。問題は、ドラッグとスケールでのパフォーマンスがあまり良くない、fpsが10以下になることです。私は(普通の)スクリプトのパフォーマンスを向上させるために、 。

http://jsfiddle.net/kHGvh/13/embedded/result/
http://jsfiddle.net/kHGvh/13/

+0

うん、タイプミスのため申し訳ありませんKineticJS =) – elonmir

答えて

2

私はちょうどFabric.jsを使って同じことを試しましたが、好奇心がかかりません。

私が著しく優れたパフォーマンスを見ています - 私は実験的な「group_rewrite」ブランチ使用していhttp://jsfiddle.net/M7n4p/

注 - https://github.com/kangax/fabric.js/branches

FWIWは、ここでそれを作成するために使用されるコードは、ちょうどキネティックとあなたの比較を与えること(です.js)。

マークアップ:

<canvas id="c" width="1200" height="600" style="border:1px solid #ccc"></canvas> 

JS:

var canvas = new fabric.Canvas('c'); 

var rects = [ ]; 
for (var i = 1; i <= 47; i++) { 
    for (var j = 1; j <= 42; j++) { 
    var rect = new fabric.Rect({ 
     left: i*28, 
     top: j*18, 
     width: 20, 
     height: 10, 
     fill: 'green' 
    }); 
    rects.push(rect); 
    } 
} 

canvas.add(new fabric.Group(rects)); 
+0

確かに、パフォーマンスは少し良くなりましたが、私は別の解決策を見つけなければならないと思います – elonmir

0

ドラッグ可能なグリッドを作成するときに私も同じ問題を抱えています。しかし、私はそれについてできることはほとんどないと思う。

あなたが持っている細胞の数を減らすことについて考えることができます。 2k +矩形は、キャンバス上の形状を追跡する少なくとも2k +個のオブジェクトです。ドラッグイベントが少なくとも10フレーム/秒で発生すると、毎秒20k +の計算とオブジェクトアクセスが発生します。それが問題を引き起こす形状のせん断数。

+0

はい、私は主な問題を理解し、多分、オブジェクトをインスタンス化する任意の解決策はありますか?問題は、図書館に可視化する必要がある2k +ストックがあるため、これらのオブジェクトをすべてレンダリングする必要があることです。場合によっては、在庫が増えることさえあります。 – elonmir

+0

@elonmirあなたはこれに対して別のアプローチを検討したいかもしれません。キャンバスにはキャンバス上の図形の追跡メカニズムがないため、オブジェクトが使用されます。 – Joseph

+0

私は提案のために開いています=) – elonmir