작년에 Mapnik library (서버 측, 비트 맵/타일링)을 사용하여 웹 맵에서 몇 가지 실험을했습니다. 이제 d3.js를 사용한 클라이언트 측 접근 방식 인 벡터를 사용하여 동일한 실험을 반복하려고합니다.팬/줌의 D3.Geo 성능
zoom
이 느리고 pan
이 부진한지도 (~ 680 도형)가 있습니다 (this example by Mike Bostock). 문제가 zoommove
콜백에있는 것으로 의심됩니다. selectAll("path").attr("d", path)
은 시간이 오래 걸립니다.
function zoommove() {
projection.translate(d3.event.translate).scale(d3.event.scale);
mapa.selectAll("path").attr("d", path);
console.log('zoommove fired...');
}
질문 :
- 는 여기 뭔가 잘못하고 있습니까?
- 성능을 최적화하려면 어떻게해야합니까?
지도이 (jsfiddle here)입니다 :
데이터 소스는 topojson 형식입니다. 어떤 모양이 폐쇄되지 않기 때문에 그것은 간단하고, 이미 너무 많은 수 있습니다 : 단순화 플래그없이 topojson을 실행할 때
[업데이트]
가 열려 형상의 문제 같은데
도 발생, 나는 아직도 조사 중이 야. 나는 여기에 어떤 단서를 주셔서 감사하겠습니다, 문서는 매우 자세하지 않습니다.
당신이 바로 그 트랙에 저를 얻었다. 이동중인 동일한 요소에 대해 변환이 계산되기 때문에 팬은 약간 울퉁불퉁합니다. 그러나 문제를 해결할 수는 있습니다. ('d3.event.translate'는 배열입니다.) 당신의 대답을 약간 편집 했으니 까, 괜찮 으면 좋겠다. –
더 짧은 "translate ("+ d3.event.translate + ")"는 자바 스크립트가 배열과 문자열의 추가를 처리하기 때문에 작동하지만 길이가 너무 짧거나 불분명 할 수 있습니다. 행운을 빕니다! –
당신 말이 맞아요. 수정 된 내용을 취소하고 다른 답변에서 나를 위해 잘 된 것을 게시하십시오. 고맙습니다! 매우 도움이됩니다. –