2015-05-08 2 views
4

Я использую D3 для рендеринга нескольких сотен элементов svg. Однако только немногие из них видны одновременно в окне просмотра.Скрытие экрана SVG-элементы

Так что я подумал, что я мог бы получить повышение производительности, удалив те элементы, которые находятся за пределами экрана, и воссоздает их, когда они прокручиваются назад.

Это разумное предположение?

Есть ли инструменты для такой вещи?

ответ

1

В целом, взгляните на и use на повторное использование элементов или групп. Например, вы можете создать «пул» объектов и применить перевод, чтобы разместить их внутри или вне области просмотра.

+0

спасибо. моя цель состоит в том, чтобы уменьшить количество элементов dom, и из того, что я понимаю, используя «использование», все равно будет отображать элементы ... – Ofri

2

Если вы просто обеспокоены тем, что они невидимы, вы можете создать экземпляр тех, которые вам не нужны, из-за границы элемента, а затем transform("translate(x, y)") их в поле зрения, когда они вам понадобятся.

Если вы не хотите, чтобы они существовали до тех пор, пока они вам не понадобятся, сохраните их атрибуты (включая начальную позицию и все остальное, что вам нужно) в массиве объектов и создайте их на экране в их исходном положении. Это обеспечит лучшее преимущество в производительности.

+0

ну да, это то, что я имел в виду. знаете ли вы о какой-либо библиотеке, которая это делает? что уменьшает количество элементов dom, сохраняя только те элементы, которые видны и удаляют те, которые не являются? – Ofri

+0

@Ofri Если вы можете назначить нежелательные элементы dom отдельно от тех, которые вы хотите видеть (например, давая им отдельный класс), вы можете удалить их с помощью jQuery. –

1

Вы можете просто установить для display свойство none для любого элемента SVG, который вы хотите скрыть.

document.getElementById("unwanted").style.display = `none`;
<svg> 
 
    <circle id="wanted" cx="50" cy="50" r="50" fill="red"/> 
 
    <circle id="unwanted" cx="100" cy="100" r="100"/> 
 
</svg>

+1

Моя цель - сохранить в элементах dom. настроит ли дисплей на «нет» помощь с производительностью? – Ofri

+2

Ах, извините. Я вижу, что я не правильно прочитал ваш вопрос. Возможно, «display: none» может помочь, но я бы ожидал, что в большинстве случаев реализация SVG будет проверять, будет ли элемент на экране в любом случае. Возможно, вы будете делать много работы без какой-либо выгоды или даже небольшой стоимости. –