首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Raphael/Mapael排序图速度慢

Raphael/Mapael排序图速度慢
EN

Stack Overflow用户
提问于 2015-06-17 23:50:38
回答 1查看 113关注 0票数 0

我正在使用拉斐尔和Mapael创建一张美国地图,上面有全国不同学校的地点。

现在,如果我只有几个点,这个功能工作得很好,但是在我添加了我所有的点(大约60个)之后,当我点击不同的图例按钮将点排序到不同的分区时,它会变慢。

我需要修改一些点击事件代码,让它在使用meteor时完成我想要的排序,以下是我的点击事件:

代码语言:javascript
复制
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上也有最新版本。

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

EN

回答 1

Stack Overflow用户

发布于 2015-06-18 00:25:29

我对拉斐尔和Mapael并不熟悉,但我在你的代码中看到了很多迭代,而且你似乎是在使用局部数组变量。

如果你从流星出版物以外的其他地方加载你的项目,你应该尝试使用一个minimongo本地集合来存储你的点及其相关数据。

您可以这样声明它:

代码语言:javascript
复制
var Plots = new Meteor.Collection(null);

然后像这样填充它:

代码语言:javascript
复制
for (var i = 0; i < plotList.length; i++) {
    Plots .insert(plotList[i]);
}

然后你就可以使用mongo命令更新所有的东西了,我想它应该会更快。

如果您正在使用meteor publication,这意味着您已经有了原始集合的本地版本,您应该直接使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30896494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档