怎样优化含大量Formula的Excel文档加载速度
本帖最后由 KevinChen 于 2020-11-18 09:56 编辑背景:
当我们需要加载一个包含大量Formula的文档(含FormulaRule等),
默认在导入后,为保证数据完整和正确,SpreadJS会自动重算所有公式,
这样就会导致加载文档的时间变长。
优化思路:
实际上SpreadJS提供了几个可以优化的配置项,以下一一解释:
1、fromJSON的doNotRecalculateAfterLoad属性:
正常情况下,无论是Excel还是SpreadJS,公式计算默认都是实时生效的,
因此在导入文档时文档数据已经是统一并正确的,所以这个属性可以告知SpreadJS,
不需要在导入后执行重算。
设置这个属性表示开发者清楚最终用户的使用环境,比如不会通过一些第三方控件或插件,
导出一些“半成品”的Excel文档。
参考API:
https://demo.grapecity.com.cn/spreadjs/help/latest/content/SpreadJS~GC.Spread.Sheets.Workbook~fromJSON.html
2、Workbook的calcOnDemand配置:
用法:spread.options.calcOnDemand = true;
与fromJSON结合使用的代码示例:
spread.fromJSON(workbookObj, {
doNotRecalculateAfterLoad:true,
//ignoreFormula: true
});
spread.options.calcOnDemand = true;
这个属性是用来告诉CalcService(计算引擎),按需求执行计算,而不是每次有数据改变都重算所有的公式。
关联功能:自V13开始,SpreadJS已经可以支持公式追踪,也就是获得单元格之间的引用树,参考示例:
https://gcdn.grapecity.com.cn/showtopic-67982-1-2.html
https://gcdn.grapecity.com.cn/showtopic-67984-1-1.html
3、fromJSON的ignoreFormula参数:
前端受平台所限,物理极限较低,单页面算力有限,所以在一些极端情况下(比如百万量级的Formula),或仅仅只需要数据而不需要导入公式时,可以利用fromJSON的ignoreFormula参数来控制:
示例代码见2,API见1.
2020-11-18 更新:SpreadJS V14 新版本发布,推出了增量加载的功能,可以大幅减少大量公式文档加载的卡顿时间:
https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/workbook/incremental-loading/purejs
v16版本支持懒加载模式,率先加载用户激活的表单页,通过openMode参数可以开启,demo参考:https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/spreadjs-file-format/overview/purejs
通过附件中的Demo可以明显看到大数据量下,懒加载的速度更快,根据已有的测试,一个18.7M的10页10w行数据的Excel文件在ThinkPadx13的环境下的Chrome浏览器中加载时间仅用4.9s
页:
[1]