Рафаэль / Мапель медленно сортируют участки
Я использую Рафаэля и Мапаэля для создания карты США с точками разных школ по всей стране.
Прямо сейчас функциональность работает отлично, если у меня есть только несколько точек, однако после того, как я добавлю все свои точки (около 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, и я предполагаю, что это должно быть быстрее.
Если вы используете метеорную публикацию, это означает, что у вас уже есть локальная версия оригинальной коллекции, и вы должны работать непосредственно с ней.