通过avalon2.0.*
与avalon2.1.*
这30多个小版本的迭代,avalon终于实现本身一套html parser, 虚拟DOM系统与两个数组的精致diff算法,再结合mobx的一些源码阅读所得,终于催生了avalon2.2。html
avalon2.2是一个里程碑的版本,模块所有使用es6 module方式,并尽量使用es6的语法来编写。使用rollup进行打包,所以如今avalon2兼容IE6的版本只要7300行代码。avalon2现代版本(IE10+)只要6300行。avalon兼容IE6的版本,强化兼容支持,其用到的VBScript代码进一步优化,并重写全部测试。avalon现代版本,则直接容许使用Proxy实现VM。这是第一个使用Proxy作监听的MVVM框架!react
fix IE6-8 opacity BUGgit
减小VM的系统属性,__const__
, __data__
,__proxy__
,$skipArray
被废掉es6
vmodel模块所有重写,让它内部用到的私用方法更加合理github
directives模块所有重写,由于如今不走react的渲染模板思路了算法
component模块所有重写,它如今是彻底独立的做用域,可能与这前的有一点不兼容。不过,这对维护组件自身的状态很是有利。chrome
watch再也不支持*号数组
strategy模块被打散了,细分为parser与renders与vtree这三个模块。renders里面有domRender与serverRender。浏览器
vdom模块,虚拟DOM转真实DOM时,对低版本浏览器的支持更好。框架
avalon2.2最大的优势体如今如下几处:
直接开启Proxy监听时代,它比Object.defineProperty更为神通广大,所需代码更少。
依赖收集与依赖追踪更完美。早期没有依赖追踪,只会第一次将指令转换为视图刷新函数时肯定VM属性与视图元素的依赖关系,若是里面存在三目运算符,if else时就会有些依赖没有收集到。依赖追踪保证依赖关系是最新的,当不存在依赖时,就会销耗该属性背后的一系列对象,垃圾回收。
组件机制臻于完美,独立的VM,6个生命周期钩子,长驻机制。
重写全部测试,基于jasmine与istanbul与karma,所有跑通IE6-11,firefox, chrome, safari与phantomjs