油炸小可爱|SpreadJS 前端表格技术分享,硬核干货:葡萄城( 三 )


相较于传统的链式存储或数组存储 , 稀疏矩阵存储构建了基于行索引的数据字典 , 在松散布局的表格数据中 , 稀疏矩阵只会对非空数据进行存储 , 而不需要对空数据开辟额外的内存空间 。
这种特殊的存储策略 , 不仅节省了内存消耗 , 也使得数据片段化变得更加容易 。 利用SpreadJS , 可以随时框取整个数据层中的一片数据 , 进行序列化或反序列化 。
借助这个特性 , 开发者甚至可以随时替换或恢复整个存储结构中的任何一个级别的节点 , 实现高效的数据回滚和数据恢复 。
3.支撑复杂逻辑运算的计算引擎 , 实现稳定可靠的应用系统
表面看似简单的Excel公式 , 却具备高阶编程语言的一切特性 , 如语法分析、解析、运算、执行等 。
当用户设置一个公式到表格中 , 计算引擎会将其解析为一个中缀表达式 , 如公式"SUM(A1:B1,3/E1,C1)+2*(D1-1)" , 当通过计算引擎的解析后 , 会在内存中以树型结构进行存储 , 这个树型结构被我们称为表达式树 。 表达式树的生成 , 是后续构建计算依赖链的关键 。
当一个公式被解析为表达式树后 , 计算引擎将根据运算上下文为其构建运算依赖链 。 运算依赖链的目的是为了按需计算 , 当表格内容发生变化时 , 只有被影响的表达式树会进行运算 , 而运算的依据就是依赖链 。
当整个依赖链中的任意节点发生变化时 , 沿着这条依赖链 , SpreadJS会查找依赖节点并进行重算 , 这个过程中 , 没有在依赖链中的节点是不会发生重算计算的 , 也就是我们所说的脏值运算 。
利用这样的机制 , SpreadJS大大提升了整个表格的运算速度 , 给用户更好的使用体验和更加精准的运算结果 。
除了绘制引擎、存储策略和计算引擎外 , SpreadJS还实现了更多技术细节 , 例如触摸支持、富文本支持、前端Excel导入导出、JSON存储等 , 而这些技术点 , 承载了葡萄城数年来在表格控件的开发技术和长期服务于开发者的经验积累 。
SpreadJS广泛应用于各行业企业信息化系统开发目前 , SpreadJS已广泛应用于各行业的信息化系统开发中 , 满足表格文档协同编辑、数据填报、类Excel报表设计等业务场景 , 帮助华为、苏宁易购、天弘基金、远光软件等各领域龙头企业 , 搭建出功能和布局均高度类似于Excel的软件系统 , 加速这类信息系统的交付 。
以华为勘验设计平台的系统搭建为例:
关于SpreadJS的产品介绍及应用案例 , 欢迎点击文末了解更多访问葡萄城官网 。


推荐阅读