Lucas Liao's Blog

通过snabbdom原生实现简易的记账本

简易的记账本

一道来自xmind的前端笔试题,写着挺有意思的,不妨记录一下哈

如下:

本题目的基本需求为构建一个简易的记账本应用程序。

我们将为你提供一份以 CSV 形式存储的数据表格,里面包含了一份虚构的账单数据, 加载我们所提供的数据;

  • 以列表的形式展示账单内容,并且提供下拉框选择月份进行筛选,其中列表中所展示的账单为选择月份的账单;

  • 简单地统计并展示所选月份的收入和支出总金额。

以上为本题目的基本需求,而如果你需要应聘的岗位为高级前端工程师或以上岗位,则需要完成以下附加需求:

  • 对账单分类进行二次筛选;

  • 对选择月份内的所有账单根据账单分类进行支出金额统计,并进行排序。

思路

根据题目的描述,如果使用业界的mvvm前端框架,很快就能完成题目的需求,但这样又会少了很多意思,于是我的想法是,能否参考vue,react等框架,自己实现一个mvvm的demo出来,把之前所了解的的理论概念实践起来。

实践

Proxy + Snabbom

浏览器dom节点的创建,更新等操作是非常消耗性能的,于是使用sanbbdom虚拟dom的管理dom的变化,通过proxy拦截filter条件变量set方法,在条件发生变化时候,触发生成最新的vnode,通过sanbbdom的diff计算,尽可能复用原有的dom节点。在细节处理中,简单增加了一个cache缓存,优化查找分类的效率。

online: https://codesandbox.io/s/xmind-75dqm?file=/index.html

github: https://github.com/yiyu-liao/awesome-snabbdom