첫 번째 질문에 대한 대답은 예 입니다. 매우 일반적인 구성으로 OL을 사용하고 있습니다. 성능을 향상시키기 위해 사용할 수있는 트릭이 있습니다. 나중에 알아볼 것입니다.
질문 2에 대한 답은 (특히 고착과 관련하여) 가능할 것입니다. 이 사이트에서 대안 목록을 검색 할 수 있습니다 (지금 마음에 드는 것은 Leaflet ).
질문 3에 대한 답 : 측정부터 시작하십시오.
렌더러가 벡터 레이어의 옵션 목록에 명시 적으로 지정되도록 앱 의 로컬 복사본을 편집했습니다 . 테스트하는 동안 Canvas 렌더러를 생략 한 다음 실험을 다른 페이지로 다시로드합니다.
var pts = new OpenLayers.Layer.Vector("Points", {renderers: ["Canvas", "SVG", "VML"]});
이 출력합니다 그래서 나는 다시 그리기 기능에 타이머를 추가하는 방법을 많이 지출 시간을 그리기 :
function redraw() {
var start = (new Date).getTime();
[...]
var diff = (new Date).getTime() - start;
console.log("redraw completed in "+diff+"ms");
그 후 OSX SL에서 1000 및 5000 기능을 그리는 Chrome 17 및 Firefox 8.0.1에서 여러 번 실행했습니다. 놀랍게도 SVG 렌더러는 평균 캔버스 렌더러보다 20 % 빠릅니다! (참고 : Windows의 js 시간은 OSX만큼 정확하지 않으므로 결과의 일관성이 떨어질 수 있습니다).
이것과 당신의 말
문제가되는지도 상호 작용입니다
IMHO는 핫스팟이 기능의 벡터 처리에 있다고 알려줍니다. 내 응용 프로그램을 작업하는 동안 최근에 그것을 살펴보고 하위 클래스를 결정한 다음 간단한 포인트에 사용하지 않는 모든 복잡한 코드를 제거하기로 결정했습니다. 분명히 나는 매우 열중하고 OpenLayers.Geometry.Point에 대한 종속성을 제거했으며 내 버전은 이제 x, y 속성을 가진 간단한 js 객체에서 작동합니다.
옵션은 다음과 같은 이점 / 비용 순서입니다.
첫 번째 옵션은 다음과 같이 전략 옵션을 벡터 레이어에 구성하여 서버 측에서 가시 점 을 필터링하는 것입니다.
strategies: [new OpenLayers.Strategy.Refresh({force:true}), new OpenLayers.Strategy.BBOX({ratio:2, resFactor: 3})],
이렇게하면 클라이언트 측에서 그려진 기능의 수를 확대 할 때 그 대신 가시적 인 기능으로 제한됩니다.
두 번째 옵션 으로 사용자 정의 된 Vector / Renderer 작성을 고려할 수 있습니다 . 내 github 페이지 에서 사용자 정의 제거되고 더 빠른 구현의 예를 볼 수 있습니다 . 모든 용도에 적합하지는 않지만 내가 제안하는 것에 대한 대략적인 아이디어를 제공하기에 충분해야합니다.
사용자가 완전히 축소 될 때의 세 번째 옵션은 일종의 서버 측 기능 클러스터링 을 구현 하여 근접 점이 단일 기능으로 병합되어 그려지는 기능의 수를 다시 줄이는 것입니다.