2013-05-29 3 views
1

У меня очень большой набор данных lat/long, который я бы хотел фильтровать и отображать на стороне клиента. Я профилировал и оптимизировал все, что мог, но есть что-то, что можно сделать, чтобы ускорить работу?Нокаут + большой набор данных

  • Точность должна быть на уровне мили/километр.
  • Мне нужна поддержка IE 7/8/9/10, хотя я согласен с тем, что мы будем работать, скорее всего, будет хуже.
  • У меня нет абсолютной зависимости от любой библиотеки, что лучше всего подходит для работы.

Грубо

  • Chrome: 1.1s
  • Firefox: 0.9s
  • IE10: 5.1s
  • IE9: 3s

http://jsfiddle.net/hRvKz/

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

По какой-либо причине вы не можете выполнять фильтрацию на сервере? –

+0

Я экспериментирую, чтобы проверить, могу ли я сделать фильтрацию клиентов быстрее, чем фильтрация постфактум после фильтрации в немного латентности. Серверы базируются в США, пользователи являются глобальными. – Hawxby

ответ

3

Ваш код создает зависимость между критериями и каждым образцом. Я создал вычисляемую функцию, чтобы создать зависимость между критериями и массивом samples. Это, чтобы создать только несколько зависимостей.

Измененный код принимает только 20мс против 2700ms для оригинала.

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; 
}); 

See fiddle

Я надеюсь, что это помогает.

+0

Очень приятно. Я работал по тому же пути, что и вы опубликовал это, спасибо! – Hawxby

Смежные вопросы