我正在使用DHTMLX调度程序。基本上我正在做的是向服务器发出AJAX GET请求以获取我的数据,然后使用他们的方法addEvent()加载事件。所以我在调度程序上加载了相当多的数据,我知道这需要时间。我可以将20到2500个事件添加到调度程序中,我使用个性化查询到我的服务器来优化每个视图上的请求。 GET / AJAX请求没有时间。但是,在日历中加载事件需要花费很长时间,而且不仅需要很长时间,还会冻结浏览器。我认为事件正在加载,但没有显示,因为它只是很慢,所以我创建了一个进度条。但后来我意识到浏览器在循环时挂起,所以我甚至都看不到我实现的微调器。查看实际加载的事件以及查看微调器的唯一方法是添加断点,就像您在此处看到的那样:
任何人都可以帮我吗?有没有办法让我的代码更好或至少让spinner显示加载事件?那么用户知道什么是hapenning?当我在for each中添加一个console.log时,我也可以在控制台中看到它递增,并且它的速度相当快,考虑到它可能需要1秒到35左右的大量数据,并且我没关系,我只是希望它不会挂起。
这是我的代码:
$.each( data, function( key, event ) {
var eventObj = scheduler.getEvent(event.Activity_Id_int);
var type = typeof(me.scheduler.getEvent(event.Activity_Id_int));
if(typeof(me.scheduler.getEvent(event.Activity_Id_int)) === 'undefined')
{
var text;
if(event.Titre != null)
text = event.Titre + " " + event.Ressource + '-' + event.Employe;
else
text = event.Ressource + ' - ' + event.Employe;
me.scheduler.addEvent({
id: event.Activity_Id_int,
start_date: Global.formatDateTime(event.Local_Start_DateTime),
end_date: Global.formatDateTime(event.Local_End_DateTime),
text : text,
color: Global.RandGandB_To_SchedulerRGB(event.Color_R,event.Color_G,event.Color_B),
desc_act : event.Desc_Act,
priorite: event.Priorite,
ressource_id: event.Resource_Id,
ressource_name: event.Ressource,
textColor: "black"
});
}
n++;
progress.update(n/data.length * 100);
console.log("Loading these events y'all"); });
另外,当我更改视图时,不是完全清除事件,我只是检查请求中的事件是否已经加载,这会极大地提高性能但即使我不添加任何事件,它仍然会挂起,如果我回到我已加载所有事件的视图。
答案 0 :(得分:0)
我会考虑使用for循环而不是$ .each来提高性能。 您可以查看此链接以查看差异: https://jsperf.com/browser-diet-jquery-each-vs-for-loop