2013-04-13 14 views
20

Khi tôi muốn vị trí của đối tượng đơn giản như rect hoặc line tôi nên sử dụng transform thuộc tính hoặc xy thuộc tính?trong svg: dịch vs vị trí x và y

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

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

Sự khác biệt về hiệu suất là gì?

+0

người ta nói rằng transform buộc trình duyệt để sử dụng gpu để hiển thị nội dung. Tôi quan sát thấy một sự khác biệt đáng chú ý trong các trình duyệt Android bằng cách sử dụng transform3d. Nhưng với những người khác, hiệu suất là như nhau. –

+3

@ParthikGosar bạn không thể 'transform3d' yếu tố trong SVG. – Duopixel

Trả lời

17

Trong SVG transform không được tăng tốc phần cứng. Chúng có hiệu suất tương tự cho các phần tử đơn lẻ (theo kinh nghiệm của tôi). Tuy nhiên, tôi sử dụng transform hơn để di chuyển thứ xung quanh bởi vì trong SVG không phải tất cả các yếu tố có một x hoặc y thuộc tính, hãy xem xét ...

<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" /> 

Bạn phải viết một thực hiện khác nhau cho mỗi người trong số những yếu tố này nếu bạn không sử dụng transform. Một lĩnh vực mà transform thực sự nhanh hơn là được di chuyển một số lượng lớn các yếu tố, nếu bạn có ...

<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> 

Nó sẽ ít chế biến sâu hơn di chuyển từng yếu tố riêng lẻ

+1

Tôi thứ hai đề nghị sử dụng 'biến đổi' để di chuyển mọi thứ xung quanh. Một điều nhỏ nữa là nó sửa đổi một thuộc tính thay vì hai, đó là tốt hơn nói chung. Tôi biết ít nhất một triển khai thực hiện tối ưu hóa một số thứ liên quan đến biến đổi trong svg. –

+0

Bất kỳ ý tưởng nếu sử dụng biến đổi css sẽ lấy được hoặc là nó giống nhau? Tôi có một ứng dụng mà tôi phóng to vào điểm chuột cho mỗi bánh xe chuột và nó đang chảy lại, vẽ lại toàn bộ khung nhìn. Tôi đang tìm kiếm nếu tôi có thể đạt được một số lợi thế bằng tăng tốc phần cứng, – themanwhosoldtheworld