-1

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

我们认为问题一定是在添加每个事件后由调度程序完成的完全重绘。目前,我们已经添加了一种解决方法,即我们将用户查看的日期更改为遥远的未来,添加所有事件,然后将其日期更改回原来的日期。然而,这似乎是一个 hack,我们宁愿有一个像“scheduler.config.suppress_repaint”这样的选项,我们可以在添加事件时将其设置为“true”。

这样的事情存在吗?我们无法在调度程序文档中找到任何提及此类事情的内容。非常感谢任何帮助。


编辑:根据下面的评论,此问题已通过在官方 DHTMLX 论坛上发布来解决,从而产生了解决该问题的补丁,该补丁随后被合并到下一个官方版本中。请参阅此处的讨论:https ://forum.dhtmlx.com/t/performance-when-adding-large-number-of-events-via-backbone/30367

4

2 回答 2

1

没有内置解决方案,当前版本的 dhtmlxScheduler 在向可见区域添加或加载大量事件时工作缓慢。

但是如果你想添加一个配置,你可以重写添加事件时触发重绘的方法,尽管它仍然有点hack。代码如下所示(将其放在 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 回答
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");
于 2014-04-04T10:09:21.707 回答