2014-04-01 41 views
0

添加大量事件(幾百個)時,我們在DHTMLX調度程序中發現了一個奇怪的問題。想象一下這些事件都在1月至3月的日期範圍內。如果用戶當前正在查看該日期範圍,那麼添加事件的代碼大約需要15秒才能運行。但是,如果用戶正在查看,比如說Mar-May,那麼代碼的同一部分會立即運行。不僅如此,在代碼立即運行後,您可以立即滾動到Jan-Mar範圍並查看所有200個事件;他們渲染的時間不到一秒鐘。在DHTMLX調度程序中添加大量事件時的性能

我們認爲這個問題必須是在每次添加事件後由Scheduler完成的全部重繪。目前,我們已經添加了解決方法,即將用戶視圖的日期更改爲遙遠未來的某個事件,添加所有事件,然後將其日期更改回原來的狀態。但是,這看起來像一個黑客,我們寧願有一個像「scheduler.config.suppress_repaint」這樣的選項,我們可以在添加事件時將其設置爲「true」。

這樣的事情是否存在?在調度程序文檔中,我們一直沒有找到任何這樣的事情。任何幫助非常感謝。

回答

1

添加很多事件一次,可以增加每個事件

//slow 
for (var i=1; i<100; i++) 
    scheduler.addEvent({ id:i }); 
後使用,而不是scheduler.addEvent

此代碼將重繪調度scheduler.parse

這人會重繪調度一次

//fast 
var data = []; 
for (var i=1; i<100; i++) 
    data.push({ id:i }); 
scheduler.parse(data, "json"); 
+0

謝謝!我喜歡一般的方法。不過,我們使用「主幹」方法來填充我們的事件,因此只需將它們添加到指定集合即可,計劃程序會將它們自動添加到指定的集合中。 (換句話說,我們從不顯式調用「addEvent」。)有沒有辦法使解決方案適應這種情況? –

+0

我沒有看到在骨幹的情況下做同樣的工作。在主幹收集發生變化之後,當前代碼總是重新繪製調度器。我認爲你需要在官方的dhtmlx論壇上打開這個問題。 – Aquatic

+0

添加:http://forum.dhtmlx.com/viewtopic.php?f=6&t=36014 –

1

沒有內置的解決方案,dhtmlxScheduler的當前版本在向可見區域添加或加載大量事件時工作緩慢。

但是,如果你想添加一個配置,你可以覆蓋添加事件時觸發重繪的方法,雖然它仍然有點破解。 代碼migth看看下面的(把它放在某處後腳本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 
相關問題