2013-04-13 14 views
20

Kiedy chcę ustawić proste obiekty, takie jak rect lub line, czy powinienem użyć atrybutów transform lub x i y?w svg: translate vs position x i y

// this 
d3.selectAll('rect') 
    .attr('x', Number) 
    .attr('y', 0) 

// or this? 
d3.selectAll('rect') 
    .attr("transform", function(d) { return 'translate(' + d + ', 0)' }); 

Jaka jest różnica w wydajności?

+0

jest powiedziane, że przekształcać zmusza przeglądarkę używać gpu do renderowania rzeczy. Zauważyłem zauważalną różnicę w przeglądarkach z Androidem za pomocą transform3d. Ale z innymi, występ był taki sam. –

+3

@ParthikGosar nie można "transform3d" elementów w SVG. – Duopixel

Odpowiedz

17

W SVG transform nie jest przyspieszane sprzętowo. Mają mniej więcej taką samą wydajność dla pojedynczych elementów (z mojego doświadczenia). Jednakże, używam transform więcej, aby przenieść rzeczy wokół, ponieważ w SVG nie wszystkie elementy mają x lub y atrybuty, należy rozważyć ...

<line x1="0" y1="0" x2="100" y2="100" /> 
<circle cx="100" cy="100" r="100" /> 
<path d="M 0 0 L 100 100" /> 
<rect x="0" y="0" width="100" height="100" /> 

Musisz napisać inną implementację każdego z tych elementów, jeśli nie używasz transform. Jednym z obszarów, gdzie transform jest rzeczywiście szybciej porusza się wiele elementów, jeśli masz ...

<g transform="translate(100, 100)"> 
    <line x1="0" y1="0" x2="100" y2="100" /> 
    <circle cx="100" cy="100" r="100" /> 
    <path d="M 0 0 L 100 100" /> 
    <rect x="0" y="0" width="100" height="100" /> 
</g> 

To będzie mniej intensywny niż przetwarzanie porusza każdego elementu indywidualnie

+1

Po drugie zalecam użycie 'transform' do przenoszenia rzeczy. Inną drobną rzeczą jest to, że modyfikuje jeden atrybut zamiast na dwa, co jest ogólnie lepsze. Wiem o co najmniej jednej implementacji, która optymalizuje pewne rzeczy związane z transformacjami w svg. –

+0

Każdy pomysł, jeśli korzystasz z transformacji css, pobierze wzmocnienie, czy to jest to samo? Mam aplikację, w której przybliżam punkt myszy dla każdego kółka myszy i ponownie się przepływa, ponownie maluję cały widok. Patrzę, czy mogę osiągnąć pewną przewagę poprzez przyspieszenie sprzętowe, – themanwhosoldtheworld

Powiązane problemy