【v17】内存泄漏问题
本帖最后由 Wilson.Zhang 于 2024-11-8 14:00 编辑产品:SpreadJS
版本:17.1.8
调研编号:SJS-27082
Last Review:2024-11-08
当前进展:已在17.1.9版本修复。
场景:用户在vue项目中目录树来回切换会触发多次fromJSON
问题:spread.destroy后,有些数据依旧会存在内存当中,导致用户切换多次后,内存累增
在demo中执行以下代码即可浮现:
// 模拟渲染第一篇文章
window.fn(window.excel1);
// 模拟切换第二篇文章
window.sheet = null;
window.spread.destroy();
window.spread = null;
window.fn(window.excel2)
// 模拟切换至非excel页面
window.sheet = null;
window.spread.destroy();
window.spread = null;
本帖最后由 Ellia.Duan 于 2024-10-29 18:07 编辑
您好,我需要多次测试下,有结果会及时通知您。 本帖最后由 Ellia.Duan 于 2024-10-30 14:50 编辑
您好,重新修改了您的html文件,且将版本更新为最新版17.1.8。
代码调整如下:
function loadSpread1() {
return new Promise((resolve, reject) => {
window.fn(window.excel1);
console.log('加载1')
});
}
function loadSpread2(i) {
return new Promise((resolve, reject) => {
window.sheet = null;
window.spread.destroy();
window.spread = null;
console.log('销毁2', i)
window.fn(window.excel2)
console.log('加载2', i)
});
}
function loadSpread3() {
return new Promise((resolve, reject) => {
window.sheet = null;
window.spread.destroy();
window.spread = null;
console.log('销毁3')
});
}
let list = [], num = 500
for (let i = 0; i < num; i++) {
if (i == 0) {
list.push(loadSpread1())
} else if (i == num - 1) {
list.push(loadSpread3())
}
else {
list.push(loadSpread2(i))
}
}
Promise.all(list).then(() => {
console.log("finish");
});
}在此基础上,修改num的值分别为10,100,500 ,观察memory变化。 分别对应memory大概为100M , 300M , 1000M 。
我将深入调研此问题。调研编号:SJS-27082
本帖最后由 Ellia.Duan 于 2024-10-30 15:25 编辑
您好,根据楼上的demo ,调研结果如下:
1、在fromJSON中使用incrementalLoad,这将使fromJSON流程变为异步,一旦fromJSON流程变为异步模式,即表示。
1)当使用destroys 销毁spread对象时,spread仍在fromJSON过程中
2)当加载一个json时,可能之前的fromJSON过程还没有完成。所以,需要在测试demo中,注释掉incrementalLoad相关代码,否则将会报错。
当然,这个问题在用户实际来回点击过程中,有可能出现(还未加载完成,切换另一个页面),有可能不出现。
2、在您的代码中,初始化了Designer对象,但是销毁了spread ,这是一个不正确的用法。
1) 可以销毁designer对象。designer.destroy()
2) 如果初始化的是spread对象 ,可以用spread.destroy()
经过上面修改后,html文件如下:
将此html文件,放到楼上给出的demo中,然后在浏览器中执行,发现修改num值为10,100,200 ,内存大小分别为:100M, 180M , 243M 。我将继续调研此问题
Ellia.Duan 发表于 2024-10-30 15:24
您好,根据楼上的demo ,调研结果如下:
您好,由于文档内容过大,因此我们需要才用incrementalLoad去进行加载,否则会导致用户加载时间变长,因此期望在使用incrementalLoad的基础上修复此问题,感谢。 收到反馈,我继续调研此问题。 本帖最后由 Ellia.Duan 于 2024-11-1 16:23 编辑
您好,关于内存累加的问题将在17.1.9版本修复,我将此贴移至bug反馈区。
以及您提到的incrementalLoad异步加载问题,可以在callback时执行designer.destroy()。
您好!该问题已在17.1.9版本修复,17.1.9版本也已发布,您可以升级版本后使用。
{:5_110:} 您好,17.1.9版本修复后,修改num值,内存情况如下图所示:
您好,17.1.9版本已发布,请更新版本进行测试。
页:
[1]