我认为我有一些与 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 中删除了很多字体。以前我在 CKEditor 中加载了很多 Google 字体,我想可能有 50+。现在我将其减少到大约 15。
这两种添加一起大大提高了性能。在内存用完之前我可以单击(调用 clickTextElement() )大约 10-20 次。我现在已经尝试点击/调用该函数数百次而没有任何明显的性能损失。
如果有人想添加有关此修复程序以及有关 clearCustomData() 和 removeAllListeners() 函数调用的信息,请添加。
关于javascript - setData() 上的 CKEditor 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21388256/