我认为我有一些与CKeditor setData()函数相关的大内存泄漏。我有一个网络应用程序,用户可以使用Javascript设计自己的内容。 CKEditor用作WYSIWYG编辑器,供用户编写设计的每个部分的内容。
每次用户单击其设计中的可编辑文本元素时,都会调用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() );
}
}
答案 0 :(得分:3)
首先添加以下代码,我能够提高此功能的性能:
editor.document.clearCustomData();
editor.document.removeAllListeners();
editor.window.getFrame().clearCustomData();
editor.window.getFrame().removeAllListeners();
在函数的开头clickTextElement();我们的想法是在将新数据加载到编辑器之前清除与编辑器相关的所有数据。我不确定这些调用中哪一个最能提高性能,我尝试逐一取消注释以查看性能损失/改进,并且很难区分它们。
我还从CKEditor配置中删除了很多字体。以前我把很多谷歌字体加载到CKEditor中,我想说可能有50多个。现在我把它减少到大约15个。
这些新增功能共同改善了性能。在内存耗尽之前,我可以点击(调用clickTextElement())约10-20次。我现在尝试点击/调用该函数数百次而没有任何显着的性能损失。
如果有人想要添加有关此修复的信息以及有关clearCustomData()和removeAllListeners()函数调用的信息,请执行此操作。