最近给Waikiki项目(一个Javascript实现的可编辑的speadsheet)添加了单元格公式的功能。比如,可以设置单元的公式来引用其他单元格值,"=C2*(D2+F2)"。

在最初的设计中,由于需求简单没有考虑仔细,采用了以下方案:
当用户更新某个cell的时候,代码会刷新所有其他的cell,如果这些cell的formula属性有值,就会重新计算得到新的值。因为公式都是在每个cell的formula属性中,代码不知道单元格之间有哪些存在公式之间的引用,所以只能全部刷新(当时只考虑有几个特殊单元格要设置公式,这个做法问题不大)。
现在要实现任意单元格的公式编辑,在更新某个单元格,然后全部刷新其他单元格,就会存在这样的问题:
全部刷新是对整个grid做row-by-row的重新计算,前面的单元格要早于后面的单元格计算,如果前面的单元格的公式引用了后面的单元的值,最后的结果是不正确的。
虽然再做一次从下网上的扫描刷新可以解决这个问题,但是对于更加复杂的前后或者左右单元格相互引用带来的问题,还是不能根本解决。因此,我认为这个方案是行不通的。可行的办法是把所有有公式的单元格构建在一颗树上,这样可以知道单元格之间的引用关系。但是Javascript的数据结构太简单,没有树的概念,自己实现肯定会引来更多问题。
请问有什么好的解决办法?