2013-05-29 1 views
1

필자는 클라이언트 측을 필터링하고 표시 할 수있는 매우 큰 위도/경도 데이터 세트를 보유하고 있습니다. 내가 할 수있는 최선의 프로파일 링과 최적화를했지만 은 성능 향상을 위해 할 수있는 것 이상의 것이 있습니까?녹아웃 + 대형 데이터 세트 성능

  • 정확도는 마일/킬로미터 수준이되어야합니다.
  • IE 7/8/9/10 지원이 필요 하겠지만 성능이 떨어질수록 성능이 저하 될 것입니다.
  • 저는 작업에 가장 적합한 라이브러리가 무엇이든간에 절대적인 의존성이 없습니다.

대략

  • 크롬 : 1.1s
  • 파이어 폭스 : 0.9s
  • IE10 : 5.1s
  • IE9 : -3

http://jsfiddle.net/hRvKz/

// Apparently I must post code... but out of context it would make no sense. 
// Checkout jsfiddle. 
+0

서버에서 필터링을 수행 할 수없는 이유는 무엇입니까? –

+0

약간의 대기 시간에 필터링을 필터링하여 서버 포스트 백 필터링보다 클라이언트 필터링 속도를 빠르게 할 수 있는지 실험하고 있습니다. 서버는 미국에 기반을두고 있으며, 사용자는 글로벌입니다. – Hawxby

답변

3

코드는 criterias와 각 샘플 간의 종속성을 만듭니다. criterias와 samples 배열 사이의 종속성을 만들기 위해 계산 된 함수를 만들었습니다. 이는 몇 가지 종속성을 생성하기 위해서입니다.

변경된 코드는 원본의 경우 2700ms에 대해 20ms에만 적용됩니다.

See fiddle

viewModel.computedLocations = ko.computed(function() { 
    var lat = viewModel.filters.lat(); 
    var lng = viewModel.filters.lng(); 

    var locs = viewModel.locations(); 
    ko.utils.arrayForEach(locs, function (item) { 
     item.roughDistance = equirectangularApproximation(item.lat, item.lng, lat, lng); 
     item.closeDistance = sphericalLawOfCosines(item.lat, item.lng, lat, lng); 
     item.closeDistanceStatic = item.closeDistance; 
     item.exactDistance = haversine(item.lat, item.lng, lat, lng); 
    }); 
    return locs; 
}); 

는 나는 그것이 도움이되기를 바랍니다.

+0

아주 좋네요. 내가 게시 한 경로와 비슷한 경로로 작업하고있었습니다. 감사합니다. – Hawxby