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"); });
また、ビューを変更したときにイベントを完全にクリアする代わりに、リクエストからのイベントが既にロードされているかどうかを確認するだけで、パフォーマンスが大幅に向上しますが、ビューに戻った場合にイベントを追加しなくてもハングしますここで、すべてのイベントを既にロードしています。