Рафаэль / Мапель медленно сортируют участки

Я использую Рафаэля и Мапаэля для создания карты США с точками разных школ по всей стране.

Прямо сейчас функциональность работает отлично, если у меня есть только несколько точек, однако после того, как я добавлю все свои точки (около 60), он замедлится, когда я нажму на разные кнопки легенды, чтобы отсортировать точки по различным подразделениям.

Мне нужно было переделать немного кода событий кликов, чтобы заставить его делать то, что я хотел с сортировкой при использовании метеора, вот мои события кликов:

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 ответ

Я не знаком с Рафаэлем и Мапелем, но я вижу много итераций в вашем коде, и вы, кажется, работаете с переменными локального массива.

Если вы загружаете свои предметы из чего-то другого, кроме публикации из метеора, вы должны попытаться использовать локальную коллекцию минимонго для хранения ваших очков и связанных с ними данных.

Вы можете объявить это так:

var Plots = new Meteor.Collection(null);

И заполните это так:

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

После этого вы сможете обновить все, используя команду mongo, и я предполагаю, что это должно быть быстрее.

Если вы используете метеорную публикацию, это означает, что у вас уже есть локальная версия оригинальной коллекции, и вы должны работать непосредственно с ней.

Другие вопросы по тегам