1

我有一个非常大的纬度/经度数据集,我希望能够过滤和显示客户端。我已经尽我所能进行了剖析和优化,但是还有什么可以提高性能的吗?

  • 精度需要达到英里/公里级别。
  • 我需要 IE 7/8/9/10 支持,尽管我接受我们越往下走,性能可能会变得更糟。
  • 我没有绝对依赖任何图书馆,无论是最适合这项工作的。

大致

  • 铬:1.1s
  • 火狐: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.
4

1 回答 1

4

您的代码会在标准和每个示例之间创建依赖关系。我创建了一个计算函数,以便在标准和样本数组之间创建依赖关系。这是为了只创建几个依赖项。

修改后的代码只需要20毫秒,而原始代码需要2700毫秒。

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

见小提琴

我希望它有所帮助。

于 2013-05-29T12:03:13.943 回答