1金币
需求场景:
当新建sheet时,从上个sheet复制printInfo到新sheet,新的sheet修改打印样式时不影响原有printInfo
问题:
使用cloneDeep拷贝printInfo对象耗时过长,稍微大点的就1s多,数据量再大的得10s+,有什么办法优化吗?
代码如下:
//绑定新建sheet/删除sheet(sheet改变事件)
spread.bind(GC.Spread.Sheets.Events.SheetChanged, function (sender, args) {
const time1 = Date.now()
//操作类型
const propertyName = args.propertyName
//-------------新建sheet事件
//离开旧sheet时保存该sheet打印配置
if (propertyName == 'isSelected' && args.oldValue) {
prePrintInfo = spread.getSheet(args.sheetIndex).printInfo()
}
if (propertyName == 'isSelected' && args.newValue) {
changeNewSheetIndex = args.sheetIndex
}
if (propertyName == 'insertSheet') {
let sheet = spread.getSheet(args.sheetIndex)
sheet.setRowCount(500)
//新建sheet
if (args.sheetIndex === changeNewSheetIndex) {
spread.suspendPaint()
sheet.printInfo(_.cloneDeep(prePrintInfo));
// sheet.printInfo((prePrintInfo));
changeNewSheetIndex = -1
spread.resumePaint()
}
}
console.log("SheetChanged", args, Date.now() - time1);
});
相关帖子地址:
【v16】如何使sheet的printInfo各自独立 - SpreadJS & GcExcel专区 - 求助中心 - 葡萄城产品技术社区 (grapecity.com.cn)
demo,测试文件见附件
|
最佳答案
查看完整内容
这边调研了一下,实际上printInfo里面包含的不仅仅只有打印的信息,还有很多其他的信息。
如下图所示:
对整个printInfo对象使用深拷贝时,极有可能会遇到性能上的问题,对于这种情况,建议您有限地使用深拷贝。
举一个简单的例子,现在的printInfo中会包含当前sheet中的一些信息,这些信息不是printInfo中必要的信息,那么深拷贝这些信息就完全没有意义。
printInfo中有意义的信息如下图所示:
这些中的某 ...
|