Spread 全球架构师谈电子表格控件的性能最优原则

  • 王文刚

2014 年 10 月 16 日

话题:.NET性能调优语言 & 开发

电子表格是一种历史悠久的软件类型。近日,InfoQ 中文站编辑跟 GrapeCity 的电子表格产品 Spread 的全球架构师王灵峰进行了一次沟通,交流了有关电子表格控件的性能优化、定制化、市场需求等方面的内容。

嘉宾简介

王灵峰, 1999 年加入 FarPoint Technologies 主要从事 Spread for ASP.Net 和 Spread for Windows Form 的开发与设计工作。2009 年 GrapeCity 收购了 FarPoint Technologies. 作为构架师, 从 2009 至今, 主要从事 Spread WPF-Silverlight 和 Spreadjs 的开发与设计工作。

InfoQ:请简单做一下自我介绍吧。

王灵峰:我开始是在 FarPoint 公司。2009 年,随着葡萄城(GrapeCity)收购了 FarPoint,我就一直在 GrapeCity 了。另外,我本人一直在 Spread 研发团队,全程参与了.NET 战略下的 Winform、WebForm、WPF 版本的 Spread,以及最近的 JavaScript 版本的 SpreadJs。

InfoQ:Spread 的架构设计在历史上经历过哪些阶段?其设计理念和技术选择的理念是怎样的?

王灵峰:Spread 产品的架构要从 1991 年说起, 我们团队推出了 Drovers Professional Toolbox for Windows (供专业 Windows 程序员使用的开发包),该开发包带有 13 个 DLL,包括功能完备的电子表格控件。第一款 Spread 控件包使的 C 或 C++ 语言的开发人员迅速体验到基于商业开发控件包的好处: 极大的节省了开发时间,并能够专心致志的瞄准自己的精准的核心业务。

Visual Basic 1.0 的出现为 Spread 在专业开发市场带来了新的机遇。我们和微软沟通后,很快便在我们的 Visual Architect 中推出第一款适用于 Visual Basic 的电子表格控件。

如今,我们提供诸如 32 位 ActiveX 控件、 64 位 ActiveX 控件、Windows Forms 和 Web Forms 、WPF、Silverlight、WinRT、SpreadJs 全平台的电子表格控件。

我们的定位理念是高度可扩充、兼容历史版本、性能最优原则,同时易于熟悉 Excel 操作的用户上手,API 调用简单等。

InfoQ:您刚才提到了性能最优原则,能再简述一下性能相关的架构设计吗?

王灵峰:SpreadSheet (电子表格) 不同于 Grid(表格控件),其不仅仅提供了表格控件常用的大数据分析——排序、过滤、导出、导出 Excel 等, 同时电子表格还提供了强大的 Formula (公式) 和图表功能等功能。

为了处理这些高度复杂的模型,我们采用了 MVC 架构,并对数据存储采用稀疏存储方式,这样的设计特点是极大的节约了内存,可实现大数据处理。

这张图说明了软件架构的对外接口:

另外,如果一次性添加大数据,则通过如下的代码调用,减少公式频繁运算导致的性能损失。在 Data Model 中,类似这样的成对方法,就是为了解决大数据而设计的:

FpSpread1. SuspendFormulaParsing () 
fpSpread1.Sheets[0].DataSource = dbDataSet; 
FpSpread1. ResumeFormulaParsing (True)

InfoQ:高度可定制,能举例说明吗?

王灵峰:以 CellType 来说,Spread 提供了超过 20 种 CellType,如条形码、二维码、货币、按钮、图形等 CellType。

用户可基于以上 CellType 来定制自己的单元格类型,以确定在一个单元格中可以输入什么样的数据、避免程序员不必要的检查和验证,并为用户提供一种自然的输入数据的方式。

比如这篇博客中提到的《Spread 之自定义对角线 cellType 源码: DiagonalCellType》, 就是以非常简单的方法实现了新的 CellType,即定制了一个新的单元格类型。

InfoQ:Spread 多个平台——如 Winform、Web Form、SpreadJs 之间,可否实现数据共享?

王灵峰:当然,我们采用的是 Excel 数据格式作为我们多个平台产品之间的数据共享载体,仅采用如下的方法,即可实现多个不同平台之间的数据共享。

SaveExcel(String,ExcelSaveFlags) 
OpenExcel(String,ExcelOpenFlags)

InfoQ:你在 2014 年的研发重点是什么?

王灵峰:今年我们在 Winform、WebForm 上继续投入, 即将上市的 Spread Studio for .NET 8.0 将是非常期待的电子表格产品。另外 SpreadJs 也会推出新特性。

未来的研发重点是“Mobile first”,如对已经推出 Touch 功能的强化。

InfoQ:最后想问的是,您眼里的美国控件市场和中国控件市场有何不同?

王灵峰:我的兴趣在于使用最好的技术做出最棒产品,市场方面没有太多的研究。

不过,以我个人的经历看经济越发达的地方,人们对采购成熟商业控件就越积极。例如,我知道的美国的软件公司,对采购最新版、正版控件工具包有着非常强烈的意识,这一点和国内情况不同。 因为在他们老板的理念中,一方面基于知识产权法律的威慑,一方面是创新的理念—基于最新版、最强的功能上迭代自己的产品。从最近公司内公布的国内 Spread 市场数据来看, Spread 产品在北京周边、珠三角、上海周边地区,这些中国经济最发达的地区市场份额占国内 70% 以上。这个势头非常不错,也和最近几年国内的大环境极大改善有关。

InfoQ:谢谢您的宝贵时间!您有什么话对 InfoQ 的读者们说的?

王灵峰:不客气。我想说:“提供创新的工具,助大家在当今充满竞争的软件开发市场上脱颖而出。”

利益相关声明:本次采访的策划编辑王文刚是目前就职于 GrapeCity 的软件工程师。

感谢杨赛对本文的审校。如有意参与 InfoQ 中文站新闻报道、专家采访工作,请查阅《InfoQ 社区编辑团队加盟指南》了解相关信息!

.NET性能调优语言 & 开发