在DHTMLX Scheduler中添加大量事件时的性能

时间:2014-04-01 18:32:15

标签: javascript dhtmlx-scheduler

在添加大量事件(几百个)时,我们在DHTMLX Scheduler中发现了一个奇怪的问题。想象一下,这些事件都在Jan-Mar的日期范围内。如果用户当前正在查看该日期范围,则添加事件的代码大约需要15秒才能运行。但是,如果用户正在查看,例如Mar-May,那么相同的代码段会立即运行。不仅如此,但在代码立即运行后,您可以立即滚动到Jan-Mar范围并查看所有200个事件;他们渲染不到一秒钟。

我们认为问题必须类似于在添加每个事件后由Scheduler完成的完全重绘。目前,我们已经添加了一个变通方法,即我们将用户视图的日期更改为遥远的未来,添加所有事件,然后将其日期更改回原来的状态。然而,这似乎是一个黑客,我们宁愿有一个选项,如" scheduler.config.suppress_repaint"我们可以设置为" true"同时添加事件。

有这样的事吗?我们无法在Scheduler文档中找到任何提及此类内容的内容。任何帮助非常感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

要一次添加很多事件,可以使用scheduler.parse而不是scheduler.addEvent

此代码将在添加每个事件后重新显示调度程序

//slow
for (var i=1; i<100; i++)
    scheduler.addEvent({ id:i });

这个只会重新调度一次调度程序

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