9

经过avalon2.0.*avalon2.1.*这30多个小版本的迭代,avalon终于实现自己一套html parser, 虚拟DOM系统与两个数组的精致diff算法,再结合mobx的一些源码阅读所得,终于催生了avalon2.2。

avalon2.2是一个里程碑的版本,模块全部使用es6 module方式,并尽可能使用es6的语法来编写。使用rollup进行打包,因此现在avalon2兼容IE6的版本只要7300行代码。avalon2现代版本(IE10+)只要6300行。avalon兼容IE6的版本,强化兼容支持,其用到的VBScript代码进一步优化,并重写所有测试。avalon现代版本,则直接允许使用Proxy实现VM。这是第一个使用Proxy做监听的MVVM框架!

  • fix IE6-8 opacity BUG

  • 减少VM的系统属性,__const__, __data__,__proxy__,$skipArray被废掉

  • vmodel模块全部重写,让它内部用到的私用方法更加合理

  • directives模块全部重写,因为现在不走react的渲染模板思路了

  • component模块全部重写,它现在是完全独立的作用域,可能与这前的有一点不兼容。不过,这对维护组件自身的状态非常有利。

  • 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

项目地址: https://github.com/RubyLouvre...


司徒正美
5.6k 声望3.5k 粉丝

穿梭于二次元与二进制间的魔法师( ̄(工) ̄) 凸ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้


« 上一篇
avalon2.1.16发布
下一篇 »
avalon1.5.9

引用和评论

0 条评论