例のように、私はconsole.time()
を使って以下をテストしました。 push
が時間に約10%を追加しているように見えますが、attr
コールが処理をほぼ倍増します。
labels: 3452ms
attr: 2455ms
我々はattrの呼び出し取り外したとき、など:
が生じ
for (var i = 0; i < 4200; i++) {
paper.text(0, i * 10, 'my text');
}
:
このことによりを行う
labels: 3011ms
attr: 0ms
をたとえば、次のようにもたらし
for (var i = 0; i < 4200; i++) {
labels.push(paper.text(0, i * 10, 'my text'));
}
連鎖はパフォーマンスにほとんど影響しません。生じた
for (var i = 0; i < 4200; i++) {
labels.push(paper.text(0, i * 10, 'my text').attr({'font-size':10}));
}
:
draw: 5759ms
次に我々は、描かれた文字の数との間の直接的な相関があるかどうかを決定するために、文字列内の文字の量を分析し、時間が経過。
paper.text(5, i * 10, '0');
は無視できるで
draw: 3122ms
の時間になった
draw: 2974ms
paper.text(5, i * 10, 'texttexttexttexttexttexttexttexttexttexttexttext');
の時間になりました。
ここであなたが話したケースを、長方形で試してみましょう。同じ位置を使用して、同じ量を描き、そして唯一の時間(幅と高さ)が生じ
for (var i = 0; i < 4200; i++) {
paper.rect(5, i * 10, 50, 50);
}
レンダリングは影響しませんいくつかの属性変更することができます:数字が示すように
draw: 333ms
を、これは、私たちが信じられないほど複雑な曲線を描くためです。四角形のベクトル式は指数関数的に短くなり、一連の文字とその曲線を計算しやすくなります。
は、私はこれは実際に私の質問に答えることをわからないんだけど、I分析を感謝します。私の主な質問は、rectを使用すると、単一のパス文字列を作成して何百もの長方形を生成することができますが、わかっている限り、Raphael.jsのテキストには似たような方法はありません。私はその後、d3.jsを使用して、Raphael.js(フォントサイズが4200のテキストブロック)で6872ミリ秒かかる2351ミリ秒かかるテストに切り替えました。 – Bill
私は私のポストを締結していないようだった私は残念です!あなたが求めていることをするための方法はありません(一般的に使われている単語があれば、テキストのパスを読み込むことができません)。 Raphaelは他のいくつかのライブラリほど強力ではありませんが、非常に信頼性が高く使いやすいです。それは最適化になると、私はバニラのjavascriptを使用して見つけることがあなたの最高の賭けです。両方の図書館のテキストメソッドを調べて、問題がどこにあるかを確認します。そして、それらの優れた実装を書くことができます。 あなたの「パス文字列」の例が本当に役に立ちました! – iRedMedia