У меня когда-то была подобная вещь. SVG был в 10 или более раз шире, чем показанный выше, он содержал элементы ~ 20k и имел размер около 3 МБ. Единственное, что принесло производительность (так как это был прыжок и запуск игры), было алгоритмом, который смог найти все элементы, чей ограничивающий прямоугольник перекрывал область просмотра. С этим я мог бы использовать display: none;
, чтобы скрыть все, что невидимо.
Это уменьшило количество видимых элементов до ~ 150 за кадр, и игра бегала бегло.
Я использовал сбалансированное двоичное дерево (avl tree) и одномерный запрос диапазона, так как высота окна просмотра всегда была такой же, как и изображение.
Удачи вам!
[EDIT]
Забыла оставить что-то вроде Anwer. Из моего опыта большие/огромные графики SVG являются узким местом в рендеринге, особенно если происходит много сценариев. Если вам не нужна интерактивность с элементами из графика, так что ничего, кроме большого фонового изображения, я бы рекомендовал использовать карту Tile, основанную на изображениях PNG, что является стандартным способом в играх Jump'n'Run с объятиями »миры« так что вы можете получить Perfomance в двух точках:
- рендеринга быстрее,
- вы можете»ленивая Аякс нагрузка«плитка, в зависимости от видимости, чтобы запретить пользователь загружать»весь мир« в запускать.
В дополнение, вы можете использовать что-то вроде PIXI.js для рендеринга с помощью WebGL, что резко повлияет на производительность, а с ее помощью будет поддерживаться Tilemaps и Spritesheets.
Если вы настаиваете на преимуществах Vector Grafics (Scaling, Interactivity), вам нужно найти способ скрыть как можно больше элементов, чтобы поддерживать высокую частоту кадров.
на моем экране весь конец 2500 мс - 3300 мс –
@ Mi-Creativity Временная шкала показана для прокрутки слева направо. Не для загрузки страницы. –