setData() 上的 CKEditor 内存泄漏

2024-01-06

我认为我遇到了一些与 CKeditor setData() 函数相关的大内存泄漏。我有一个网络应用程序,用户可以使用 Javascript 设计自己的内容。 CKEditor作为所见即所得的编辑器,供用户编写设计各部分的内容。

每次用户单击其设计中的可编辑文本元素时,都会调用 editor.setData,并将 CKEditor 数据设置为所单击的用户设计的文本元素内的任何内容。

这几次工作正常,但每次用户单击新的文本元素并调用 .setData() 时,应用程序都会变得越来越慢,直到网站崩溃。我尝试在 Javascript 中禁用 setData() 函数,并且这样做时没有出现内存泄漏或性能问题。

有人遇到过类似的问题吗?有人对如何避免这种内存泄漏和性能损失有任何建议吗?

被调用并造成性能损失的函数是:

function clickTextElement() {
    var location = $(this);
    $('.selected').removeClass('selected');
    location.addClass('selected');
    $('#main-tools').hide();

    if(location.hasClass('textarea')){
        $('#imageeditor').hide();
        $('#texteditor').show();
        editor.setData( $('.selected').html() );
    }
}

我首先添加以下代码来提高该函数的性能:

editor.document.clearCustomData();
editor.document.removeAllListeners();
editor.window.getFrame().clearCustomData();
editor.window.getFrame().removeAllListeners();

在函数的开头 clickTextElement();这个想法是在将新数据加载到编辑器之前清除与编辑器相关的所有数据。我不确定这些调用中哪一个最能提高性能,我尝试一一取消注释以查看性能损失/改进,但很难区分它们。

我还从 CKEditor Config 中删除了很多字体。之前我将很多 Google 字体加载到 CKEditor 中,我想说可能有 50 多个。现在我把这个减少到大约 15。

这两个添加一起极大地提高了性能。在内存耗尽之前,我可以单击(调用 clickTextElement() )大约 10-20 次。我现在已经尝试单击/调用该函数数百次,没有任何明显的性能损失。

如果有人想添加有关此修复以及有关clearCustomData() 和removeAllListeners() 函数调用的信息,请这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setData() 上的 CKEditor 内存泄漏 的相关文章

随机推荐