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

より高速なパフォーマンスのために、 $.each の代わりに for ループを使用することを検討します。このリンクをチェックして違いを確認できます: https://jsperf.com/browser-diet-jquery-each-vs-for-loop

于 2015-03-05T14:37:27.350 に答える