0

我正在使用 DHTMLX 调度程序。基本上我正在做的是向服务器发出 AJAX GET 请求以获取我的数据,然后使用他们的方法 addEvent() 加载事件。所以我有相当多的数据要加载到调度程序上,我知道这可能需要时间。我可以将 20 到 2500 个事件添加到调度程序中,我对服务器使用个性化查询来优化每个视图的请求。GET/AJAX 请求不需要时间。但是在日历中加载事件需要很长时间,不仅需要很长时间,还会冻结浏览器。我以为事件正在加载但没有显示,因为它很慢所以我创建了一个进度条。但后来我意识到浏览器在执行循环时挂起,所以我什至看不到我实现的微调器。在此处输入图像描述

谁能帮我这个?有没有办法让我的代码更好,或者至少让微调器在加载事件时显示?所以用户知道发生了什么吗?当我在 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");  });

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

4

1 回答 1

0

我会考虑使用 for loop insted of $.each 以获得更快的性能。您可以查看此链接以查看差异: https ://jsperf.com/browser-diet-jquery-each-vs-for-loop

于 2015-03-05T14:37:27.350 回答