12

未来的十年是产业互联网的时代,产业互联网的特点是数字化、线上化、效率化。这意味着各行各业急需数字化转型和效率转型。而在这场转型过程中,企业 OA 系统扮演着至关重要的角色。

对企业而言,OA 系统不仅提高了企业的组织管理水平及办公效率,更实现了提高决策效能的目的,使企业竞争力得到提升。但是,随着 OA 系统功能模块越来越齐全,越来越臃肿,也让这一效率平台逐渐“失效”。

一、OA 系统的核心,是业务管理中的效能问题

OA 系统的管理最终还需要回归至业务管理的道路上来,毕竟业务才是企业的运作根本。OA 系统中常见的业务管理包括哪些呢?比如财务报表的制作,凭证的生成;采购部的供货商的管理,采购单据的输入与保管;业务部的合同管理,客户维护等等。这些大部分都是在表格的形式中完成分析与决策的,需要要求 OA 系统将数据完好的保存与共享,并与其他系统进行数据整合。

但目前企业 OA 系统中的表格功能,大部分都肩负着非常复杂的业务需求。不仅需要具备着传统 Excel 中的大部分核心功能,包括函数计算、条件格式、图表等等;还需要支持高效的多人协同编辑以及庞大的数据处理需求。

数据量以及表格功能的逐渐增加,随之而来的就是计算速度的降低。这不仅会影响工作效率,打断思路的连贯性,也会增加员工或者用户的出错率和对工作的厌烦程度(尤其时在处理重复任务时)。

此外,内存占用的问题,也是 OA 系统中一项非常重要但容易被人忽略的性能指标,如果技术选型时未考虑内存占用问题,往往会出现一个 3M 的文件消耗 100 多兆内存空间的情况。如果同时进行包含大数据量的 Excel 读操作,很容易造成内存溢出问题。传统企业的技术决策层普遍都会忽视“内存的价值”,但是:

  • 一旦访问量大,内存就会瞬间上涨,导致频繁 GC,导致性能下降;
  • 内存高也会导致服务器分页,这时性能就会急剧下降;
  • 吞吐量下降会导致队列排满,服务器会报 503 等错误。

所以除非企业真的有充足的预算去升级服务器,不然真的不能忽略内存的优化。这两个问题的背后,也引出了我们今天讨论的重点 —— 如何提高 OA 系统表格模块的数据处理性能 & 表格数据处理产品的技术选型。

二、你愿意投入多少成本,为 20 秒的业务优化买单?

大部分企业在项目的日常开发中遇到表格数据处理需求时,往往会在业务代码中直接引入如 Apache POI 这类的技术解决方案。

Apache POI 作为一款非常强大的 Office 软件操作包,是 Apache 软件基金会用 Java 编写的免费开源的跨平台 Java API,提供了对 Microsoft Office 格式文件的读写功能,在项目中的应用非常广泛,作为一款开源软件,为开发者提供了极大的便利。

然而,即便 POI 很强大,但仍存在一些不可忽视的问题。首先是代码相对比较繁琐,并且当 Excel 的数据量非常大的时候,POI 的操作逻辑是将整个 Excel 的内容全部读出来放入到内存中,这就导致内存消耗非常严重,一个 3M 的文件甚至需要消耗 100 多兆的内存空间。如果同时进行包含大数据量的 Excel 读操作,很容易造成内存溢出问题。

除了耗内存以外,还有版本兼容性不够等缺点,在进行版本升级的过程中,需要对以前的代码进行修改,或者对 jar 包进行版本隔离,这些都对项目带来了很多潜藏的风险。

为了帮助有相关需求的企业人员进行技术选型,提供一些更直观的数据对比,我们为大家进行了一次对比测试,下图是测试的相关结果:

葡萄城 x GcExcel

从测试数据来看,葡萄城提供的服务端高性能表格组件 GrapeCity Documents for Excel (简称:GcExcel) 无论从运行速度、功能,还是内存消耗等方面,都要比 Apache POI 表现的更为优秀,如其平均处理速度可以达到 POI 的 7 倍,而内存消耗却不到七分之一。

为了进一步测试 Excel 文件的读取性能极限,我们使用了 StopWatch 函数来监听 Excel 的打开时间,测试对象为一个包含 30 列、1,000,000 行、30,000,000 个单元格数据的电子表格文件。经过测试, Excel 打开这个文件需要等待 34 秒,而用 GcExcel 打开这样一份文件,仅需 12 秒。

这 20 秒的时间,对于用户体验以及业务流转来说,重要性不言而喻。这个测试结果也为企业选型提供了一个思路 —— 你愿意投入多少成本,来为这 20 秒的业务优化买单?

三、无需依赖 Office 和 POI,让表格数据处理性能飙升

为了这短短的 20 秒,葡萄城尝试了大量的优化实践,如减少垃圾回收、共享存储、利用高速缓存、使用基于集合的操作运算、利用 SIMD 计算数据等,基于这些实践推出的表格组件 SpreadJS 和 GcExcel 已经帮助许多企业减少了项目研发成本,实现了更高的处理性能。

以 GcExcel 为例,其在服务端实现批量导入导出电子表格数据,有效规避了前端浏览器的内存限制,配合 SpreadJS 使用,可让系统达到真正的前后端负载均衡,帮助开发者轻松应对 OA 系统开发时经常会面临的在线文档前后端数据同步、批量导出与打印,以及报表模板高性能处理等业务场景需要。

其实,表格技术及其衍生工具的概念并不新颖,但随着企业对于系统处理性能和易用性的要求逐步加深,在近几年愈发受到开发人员和技术决策者的关注,葡萄城作为深耕表格技术领域的探索者,其推出的多款表格组件已成为表格技术领域的“必备解决方案”,帮助企业用极低的成本达到“降本增效”的目的。

结语:

在数字化转型的浪潮下,大部分企业的业务运转中表格应用场景已经十分广泛,随着业务的发展,本地文档管理或者传统开源免费的 POI,已经无法满足用户对于表格产品的性能和系统兼容度的需求,这也迫使表格产品不断的优化迭代,优胜劣汰。谁能找到最契合自身业务发展的技术选型或产品,谁便更有可能找到更多的发展契机。

扩展阅读:

葡萄城前端表格控件 SpreadJS
葡萄城服务端表格组件 GcExcel
类 Excel 全栈解决方案

segmentfault 思否


思否编辑部
4.3k 声望116.9k 粉丝

思否编辑部官方账号,欢迎私信投稿、提供线索、沟通反馈。