이 질문은 MapBox GL JS의 내부를 이해하는 사람을위한 것입니다.MapBox GL JS 성능 차이의 원인
저는 MapBox GL JS를 사용하여 각 다각형의 "소유자"에 따라 색상이 지정된 40,000 개의 다각형까지의 지리적지도를 렌더링합니다. 일반적으로 소유자 당 많은 다각형이 있고 각 다각형의 "소유자"는 시간이 지나면 바뀔 수 있습니다. 소유자 수는 1 명에서 1,000 명까지 다양합니다. 나는 성능에 문제가있다. (접근 방식에 따라 다르다.) 그래서 나는 몇 가지 다른 전략을 시도했다.
- "채움 색상"에 데이터 기반 스타일링을 사용합니다. 여기에는 단일 소스와 단일 레이어가 있습니다. 나는 폴리곤 ID와 "소유자"ID를 데이터 중심 스타일의 범주로 시도했다.
- 필터링 된 레이어를 사용합니다. 여기에는 각 "소유자"에 대해 단일 소스 및 별도 레이어가 있습니다. 다시 말하지만, 폴리곤 ID와 "소유자"ID를 필터링 기준으로 사용하려고 시도했습니다.
- 각 "소유자"에 대해 별도의 소스 및 레이어 사용.
옵션 3이 가장 좋은 드로잉 속도를 갖습니다. 확대/축소 및 팬하면 레이어가 매우 빠르게 렌더링됩니다. 하지만 레이어의 소유자를 변경하고 setData가 메모리를 누출 할 때마다 setData를 호출해야만 결국 페이지가 충돌하게됩니다. 2607이라는이 이슈는 실행 불가능한 것으로 폐쇄되었으므로 이에 대한 해결책은 기대하지 않습니다.
옵션 첫 번째와 두 번째는 처음 확대/축소해도 괜찮지 만 확대 할 때 타일을 다시 그릴 때 속도가 매우 느립니다. 나는 렌더링이 20-30 초 후에 잡을 때까지 들쭉날쭉하고 낮은 디테일의 타일을 바라 보았다. "polygon"id 대신 "owner"id를 사용하면 "owner"가 변경되면 메모리 누수가 발생할 수 있으므로 setData를 호출해야합니다. 폴리곤 ID를 사용하는 경우 "소유자"가 변경되면 레이어 필터 또는 채움 색상 범주를 업데이트하면됩니다. 그러나 "polygon"ID를 사용하면 성능 차이가 눈에 띄지 않으므로 괜찮습니다.
제 질문은 왜 확대했을 때 렌더링 속도가 훨씬 빨랐는지입니다. 그것은 도면에 지정된 작업자 수와 관련이 있습니까? 옵션 1과 2에는 단일 소스가 있으므로 도면에는 단일 작업자 만 사용된다는 의미입니까? 옵션 3에는 각 "소유자"에 대한 별도의 소스가있는 반면, 여러 명의 직원이 도면을 작성합니까?
옵션 3과 관련된 메모리 누수가 v0.29.0에서 수정 된 것처럼 보입니다. – jasonpepper