在将对象加载到调度程序小部件时,每个浏览器都会挂起jQuery

时间:2015-03-05 13:59:43

标签: javascript jquery ajax dhtmlx-scheduler

我正在使用DHTMLX调度程序。基本上我正在做的是向服务器发出AJAX GET请求以获取我的数据,然后使用他们的方法addEvent()加载事件。所以我在调度程序上加载了相当多的数据,我知道这需要时间。我可以将20到2500个事件添加到调度程序中,我使用个性化查询到我的服务器来优化每个视图上的请求。 GET / AJAX请求没有时间。但是,在日历中加载事件需要花费很长时间,而且不仅需要很长时间,还会冻结浏览器。我认为事件正在加载,但没有显示,因为它只是很慢,所以我创建了一个进度条。但后来我意识到浏览器在循环时挂起,所以我甚至都看不到我实现的微调器。查看实际加载的事件以及查看微调器的唯一方法是添加断点,就像您在此处看到的那样:enter image description here

任何人都可以帮我吗?有没有办法让我的代码更好或至少让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");  });

另外,当我更改视图时,不是完全清除事件,我只是检查请求中的事件是否已经加载,这会极大地提高性能但即使我不添加任何事件,它仍然会挂起,如果我回到我已加载所有事件的视图。

1 个答案:

答案 0 :(得分:0)

我会考虑使用for循环而不是$ .each来提高性能。 您可以查看此链接以查看差异: https://jsperf.com/browser-diet-jquery-each-vs-for-loop