前后端结合解决 Excel 海量公式计算的性能问题
背景
在数据密集的业务领域,尤其是金融,保险,税务等行业中,经常需要利用 Excel 模型,来对业务进行分析和处理。例如:1.金融投资:根据模型进行估值计算,并对投资风险进行评估,通过测算出投资的内部收益率(IRR),净现值(NPV)来做投资收益分析,反应项目的获利能力。2.保险精算:运用数学,统计学,保险学的理论和方法,对保险经营中的计算问题作定量分析,以保证保险经营的稳定性和安全性。3.税务审计:在定制的审计底稿上填报基础数据,通过 Excel 的公式计算汇总,整理成审计人员需要的信息,生成审计报告,常见于税费汇算清缴,税务稽查工作等。在上述业务场景下,数据处理过程中都需要依赖很多数学计算,部分场景还需要依赖专业的数学模型。如果手工运算,不仅工程量大而且极易出错。另外,以上业务场景中的数据表格的格式也极为灵活,经常需要增加和调整。基于上述特点,以上行业的从业者往往会依赖 Excel,利用其函数计算、汇总分析、透视表等功能,完成上述业务中的复杂数学计算。
痛点
线下操作 Excel 软件,无法进行统一管理,特别是遇到模型升级,版本更新的情况。计算结果无法与其他系统,数据库,分析工具等进行交互,形成数据孤岛。如果用软件系统来管控,在前端页面中操作 Excel,可以解决版本控制,以及打通数据孤岛的相关问题,但会引入新的问题:限于浏览器运行环境的资源限制,模型中蕴含大量的复杂公式计算容易造成交互端的性能瓶颈。解决方案:基于前端运行环境性能瓶颈的存在,不能将大量公式计算放在前端进行。我们接下来采取前后端结合的全栈方案,服务端利用 GcExcel 高效的性能进行公式计算,前端采用 SpreadJS,利用其与 GcExcel 的兼容性和前端类 Excel 的操作和展示效果,将后端计算后的结果进行展示。1.读取模型之前,先用 GcExcel 在后端打开。在后端进行完整的计算。2.前端根据所展示的 Sheet 工作表,从后端读取对应的工作表并序列化进行传输。
3.前端 SpreadJS 禁用公式计算,设置计算按钮改为触发式计算。4.前端通过脏数据获取修改记录。5.当主动点击计算或者切换工作表 Sheet 页签时触发请求,将修改记录发送后端,后端将修改内容修改并整体计算。再将结果根据前端所展示的 Sheet 做序列化处理并传输至前端。6.前端进行反序列化处理展示。
两者结合,既利用了服务端的高性能避免了前端的性能瓶颈,又利用了前端的 Excel 操作进行分 Sheet 页的展示,以及前端的脏数获取修改操作并与后端交互。
源码获取
版权声明: 本文为 InfoQ 作者【葡萄城技术团队】的原创文章。
原文链接:【http://xie.infoq.cn/article/0a3e1c41b8dd53cd451e2e7d0】。文章转载请联系作者。
评论