Raphael / Mapael对分类图缓慢

时间:2015-06-17 15:50:38

标签: javascript sorting raphael mapael

我使用Raphael和Mapael创建了一张美国地图,上面有全国各地不同学校的分数。

现在功能很好,如果我只有一些点,但是当我添加所有点(大约60)后,当我点击不同的图例按钮将点分类到不同的分区时,它会慢下来。

我需要重做一些点击事件代码,让它在使用meteor的同时进行排序,这些是我的点击事件:

Template.map.events({
    'click .division1': function(event,tmp){
        if(event.currentTarget){
            var plot = Session.get('propertyMap');
            _.each(plot,function(data, key){
                if(data.type !== 'D1'){
                    var deletedPlots = [key];
                    var updatedOptions = [];
                    var newPlots = {};
                    tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
                }
                else if(data.type === 'D1'){
                    var deletedPlots = [key];
                    var updatedOptions = [];
                    var newPlots = {};
                    newPlots[key] = data;
                    tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
                }
            });
        }
    },
    'click .division2': function(event,tmp){
        if(event.currentTarget){
            var plot = Session.get('propertyMap');
            _.each(plot,function(data, key){
                if(data.type !== 'D2'){
                    var deletedPlots = [key];
                    var updatedOptions = [];
                    var newPlots = {};
                    tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
                }
                else if(data.type === 'D2'){
                    var newPlots = {};
                    newPlots[key] = data;
                    tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
                }
            });
        }
    },
    'click .division3': function(event,tmp){
        if(event.currentTarget){
            var plot = Session.get('propertyMap');
            _.each(plot,function(data, key){
                if(data.type !== 'D3'){
                    var deletedPlots = [key];
                    var updatedOptions = [];
                    var newPlots = [];
                    tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
                }
                else if(data.type === 'D3'){
                    var newPlots = {};
                    newPlots[key] = data;
                    tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
                }
            });
        }
    },
    'click .AllProperties': function(event,tmp){
        event.preventDefault();
        if(event.currentTarget){
            var deletedPlots = [];
            var updatedOptions = [];
            var newPlots = Session.get('propertyMap');
            tmp.$(".container2").trigger('update', [updatedOptions, newPlots, deletedPlots]);
        }
    }

我在embassyofrock.com上也有最新版本。

我的问题是,是否有人知道为什么需要额外的几秒钟来对图表进行排序,以及是否有解决方案使其运行得更快?您可能会注意到,点击所有学校会立即重新添加这些图表,这也是我希望其他人做的事情。

1 个答案:

答案 0 :(得分:0)

我对Raphael和Mapael并不熟悉,但我在你的代码中看到很多迭代,你似乎使用了本地数组变量。

如果您从流星出版物以外的其他地方加载项目,则应尝试使用minimongo本地收藏来存储您的积分及其相关数据。

您可以这样声明:

var Plots = new Meteor.Collection(null);

并填写如下:

for (var i = 0; i < plotList.length; i++) {
    Plots .insert(plotList[i]);
}

然后,您将能够使用mongo命令更新所有内容,我认为它应该更快。

如果您使用的是流星出版物,则表示您已拥有原始集合的本地版本,您应该直接使用它。