私もかつて似たようなことがありました。SVG は、上に示したものの 10 倍以上の幅で、約 20k の要素を含み、サイズは約 3MB でした。パフォーマンスを回復させた唯一のもの (ジャンプ アンド ラン ゲームだったので) は、バウンディング ボックスがビューポートとオーバーラップしているすべての要素を見つけることができるアルゴリズムでした。これにより、display: none;
目に見えないものをすべて隠すことができます。
これにより、表示される要素の量がフレームあたり約 150 に減少し、ゲームは再びスムーズに実行されました。
ビューポートの高さは常に画像と同じだったので、バランスの取れたバイナリ ツリー (avl ツリー) と 1 次元の範囲クエリを使用しました。
幸運を!
[編集]
答えのようなものを残すのを忘れていました。私の経験から、大規模/巨大な SVG グラフィックスは、特に多くのスクリプトが発生している場合、レンダリングのボトルネックです。グラフィックの要素との対話性が不要で、大きな背景画像が必要な場合は、PNG 画像に基づくタイル マップを使用することをお勧めします。 »worlds«、したがって、2 つのポイントでパフォーマンスを得ることができます。
- レンダリングが速くなり、
- 可視性に応じて「lazy ajax load」タイルを使用して、ユーザーが起動時に「全世界」をダウンロードするのを防ぐことができます。
さらに、PIXI.js のようなものを使用して WebGL でレンダリングすることもできます。これにより、パフォーマンスが大幅に向上し、タイルマップとスプライトシートがサポートされます。
ベクター グラフィックスの利点 (スケーリング、インタラクティブ性) を主張する場合は、フレーム レートを高く保つために、できるだけ多くの要素を非表示にする方法を見つける必要があります。