通過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