마커 렌더링 속도, 최대 마커 개수

[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.

한 번에 마커를 1000개 이상을 그려야하는데 한 번 렌더링할 때와 지도를 움직일때 렉이 엄청걸리는데

빠른속도로 렌더링 하려면 최대 몇개까지의 마커를 생성해야하나요?

현재 지도 중심좌표내 일정 범위내에서만 마커를 그리도록 해야할까요?
그렇다한다해도 한군데에 많은 마커가 있다면 이또한 처리속도가 느려질것같습니다.

대체 방법이 있을까요?

클러스터러나 dom추가, 커스텀오버레이, 이벤트등록같은것을 마커를 그릴때 동시에 처리하게되는데 관련있을까요?.

말씀하신 것처럼 여러가지 방법이 있을 수 있습니다.

최대마커갯수 이건 확정하기 어렵습니다. 사이트를 이용하는 사람의 PC성능에 따라 좀 달라집니다.
지도API의 마커는 추가될때마다 최소 DOM이 2개씩 추가가 된다고 보시면 됩니다.

그래서 1000개면 대략 2000개의 DOM이 추가가 되는 것이고,
이를 지도를 움직이면 이 2000개가 브라우저 내부에서 지속적으로 위치보정이 되어야 합니다. 그래서 느려지는 것이거든요.
느리게 느끼지 않을려면 초당 60번, 즉 60프레임잡고, 한 프레임당 모든 연산이 가능해야하기에 16.7ms안에 모든 연산이 이루어 져야 하는데, 이게 어려울 겁니다.

대량의 데이터일때는, 직접 데이터를 가공해서 이를 해결할 방법을 찾으셔야 합니다.
지도 API는 단순히 지도를 표시하고 그위에 마커나 이러한 것들을 표시해주는 API지, 내부적으로 성능까지 계산해서 최적화를 해주진 않습니다. 최적화는 개발자의 몫입니다.

  1. 중심좌표내 일정범위만 그리는 것도 방법입니다.
  2. 마커 클러스터러를 이용하거나, 클러스터러의 기능이 부족하다면 직접 클러스터링을 하는 모듈을 만드셔서 이용하셔도 됩니다.
  3. LOD를 구성하는 것도 방법입니다. LOD(level of detail)는 현재 지도를 보면, 지도판 위에 장소(POI)들이 있는데 레벨이 바뀔때마다 나타나는게 다른 것을 아실 수 있습니다. 이는 LOD를 가독성 측면에서도 짤 수 있으나, 성능향상을 목적으로 특정레벨에서는 특정 갯수만 보이게 할 수도 있습니다. 그래서 지도가 확대되면 점점 보여지게 되는 영역이 작아지니, 마커 갯수가 비슷하게 유지를 할 수 있게 되죠. 2번의 클러스터링과 비슷하지만 표출 방식이 약간 다릅니다.

그래서 런타임시 성능을 올리고 싶으시다면, 초기에 데이터를 받을때 LOD를 구성해 두고, 이를 각 레벨에서의 화면의 보이는 영역의 마커들을 표시하면서, 특정 영역에 몰린다면 클러스터링까지 붙힐 수도 있겠습니다만, 이는 하나씩 해보면서 적용하시는게 좋아보입니다.

말씀하신 커스텀오버레이, 이벤트 등록 이러한 것들도 영향이 없지는 않으나, 그보다 DOM자체가 많으면 느려지기 때문에, 이를 줄이는데 목적을 두시는게 좋을 것 같습니다.