-1

非常に多数のイベント (数百) を追加すると、DHTMLX スケジューラに奇妙な問題が発生することがわかりました。イベントがすべて 1 月から 3 月の日付範囲にあると想像してください。ユーザーが現在その日付範囲を表示している場合、イベントを追加するコードの実行には約 15 秒かかります。ただし、ユーザーがたとえば 3 月から 5 月まで閲覧している場合は、コードの同じセクションが即座に実行されます。それだけでなく、コードが即座に実行された後、すぐに 1 月から 3 月の範囲までスクロールして、200 のイベントすべてを表示できます。レンダリングは 1 秒未満です。

問題は、各イベントが追加された後にスケジューラによって完全に再描画されるようなものに違いないと考えています。今のところ、ユーザーのビューの日付を遠い未来に変更し、すべてのイベントを追加してから、日付を以前の日付に戻すという回避策を追加しました。ただし、これはハックのように思えます。イベントを追加するときに「true」に設定できる「scheduler.config.suppress_repaint」のようなオプションが必要です。

このようなものは存在しますか?スケジューラのドキュメントでそのようなことについての言及を見つけることができませんでした。どんな助けでも大歓迎です。


編集: 以下のコメントによると、この問題は公式の DHTMLX フォーラムに投稿することで解決され、パッチが解決され、その後次の公式リリースに組み込まれました。ここでその議論を参照してください: https://forum.dhtmlx.com/t/performance-when-adding-large-number-of-events-via-backbone/30367

4

2 に答える 2

1

組み込みのソリューションはありません。現在のバージョンの dhtmlxScheduler は、大量のイベントを可視領域に追加またはロードする際にゆっくりと動作します。

ただし、構成を追加する場合は、イベントが追加されたときに再描画をトリガーするメソッドをオーバーライドできますが、それでも少しハックになります。コードは次のようになります (dhtmlxscheduler.js スクリプトの後のどこかに配置します)。

(function(){

    var updated = scheduler.event_updated;

    //override a method that triggers event repaint
    scheduler.event_updated = function(){
        // if config is set - do nothing
        if(this.config.suppress_repaint)
            return false;

        // call original implementation otherwise
        return updated.apply(scheduler, arguments);
    };
})();

次に、コードで次の方法で構成を使用できるようになります。

scheduler.config.suppress_repaint = true;

//adding events...

scheduler.config.suppress_repaint = false;
scheduler.setCurrentView();//full redraw
于 2014-04-04T09:11:01.953 に答える