请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

KevinChen 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-25 11:46  /   查看:2320  /  回复:0
本帖最后由 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结合使用的代码示例:
  1. spread.fromJSON(workbookObj, {
  2.              doNotRecalculateAfterLoad:true,
  3.              //ignoreFormula: true
  4.   });
  5. 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/sp ... ntal-loading/purejs

0 个回复

您需要登录后才可以回帖 登录 | 立即注册