javascript - setData() 上的 CKEditor 内存泄漏

原文 标签 javascript jquery memory-leaks ckeditor

我想我有一些与 CKeditor setData() 函数相关的大内存泄漏。我有一个 Web 应用程序,用户可以在其中使用 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 中删除了很多字体。以前我在 CKEditor 中加载了很多谷歌字体,我会说可能是 50+。现在我将其减少到大约 15。

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

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

关于javascript - setData() 上的 CKEditor 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21388256/

相关文章:

javascript - 使用Javascript创建侧边栏是一种好习惯吗?

javascript - 检查页面是否在窗口顶部

java - 由于内部Weblogic对象而面临内存泄漏问题

javascript - 有没有一种方法可以自动向下滚动并加载使用无限滚动的任何网站的更多内容?

memory-leaks - 什么是StackOverflowError?

memory-leaks - 使用lambda作为事件处理程序会导致内存泄漏吗?

javascript - 查找字符并插入换行符

javascript - 在普通JS中替换innerHTML

javascript - 如何在“更改”中检索选定的文本

javascript - 遍历数组树?