需求重大調整,全部業務推倒重來(pc端主要任務涉及管理後臺類型的網站);html
開發週期很緊,過年前要上線;前端
公司pc端業務要求兼容到ie8;vue
2015年前端工資猛漲(特別是p2p這塊),離職潮加重,前來面試的要麼不合適(99%的面試者技術水平對不起那份高工資,也許是我要求過高),合適的人沒有選擇咱們,最後只剩下2我的,一個作業務邏輯,一個作頁面重構;react
開發週期很緊,過年前要上線;jquery
我剛入職不久,以前的前端團隊沒留下什麼現成的代碼或模式,幾乎全部的東西都須要從新開發。git
在這種狀況下,爲了更快的開展業務,花了兩三天時間,對技術選型作了一次任性而粗暴的預研:github
拋棄了jquery這種基於dom操做的開發模式,後臺有大量的數據交互和綁定,開發起來比較慢,維護性不高。由於ui都是徹底自主,像easyui這類很重的框架一方面定製起來比較繁瑣,並且學習成本高,最重要的是我的不是很喜歡。面試
而當下最流行的mvvm框架,像ng,vue,react都有一個致命問題--兼容性,雖然ng,react早期版本兼容ie8,當考慮之後的維護升級,就沒有考慮。chrome
最終選擇了兼容到ie6的avalon.js,終於使用上mvvm框架,雖然它只是個vm。
對比過1.5和以前版本,本着對做者的大名的神往及信任,項目使用了v1.5這個版本,爲後來的開發買下伏筆。segmentfault
原本想着技術棧統一,移動端也準備使用avalon.js。因爲一些需求和開發優先級等緣由,遲遲沒有開始。
前期粗暴的預研,漸漸在pc端業務開發到了中期,一直在chrome上作開發,回頭作ie兼容性時,卻踩了史上最嚴重的坑。
因而,以後對移動端的技術選型上更加慎重了,最終採用了文檔更漂亮的vuejs。雖說是慎重之選,其實更是一個幸運之選。
兩個庫我都在項目中使用,對vue愈來愈喜歡,而avalon越用越多槽點。
像這個issue,我想知其因此然。
雖然我經過用vuejs同理可知是由於涉及生成虛擬dom,組件模版必須有惟一的根元素。
這算我要求過高了,做者沒有那麼多精力,那麼接下來的有點難忍了。
avalon 在v1.5中竟然不兼容ie8-,包括官方的例子。
一樣v2.0也是這樣,本身寫個教程,給的例子本身都不測試下。
他回覆 issue的原話以下:
ms-modal關閉不了本身改改,那個原本就是教程!
太不負責了吧!若是連兼容--avalon的最重要的最基礎一點都沒作到,那我就沒有使用他的必要了。
至於報錯這項,好比父組件傳值給子組件一個子組件未定義過的值,它竟然這樣報錯
TypeError: 對象不支持此屬性或方法 onInit
那onInit
是什麼鬼?
vue中有一個局部組件的概念,起初不明白爲何要那麼設計。後來慢慢發現,這個設計過重要了,特別是在把某一個組件太過複雜,把他拆分紅更小的組件時,把這些更小的組件做爲一個局部組件封裝在父組件內部,而不會被暴露到外部。
反觀avalon的組件系統,內層組件會把全部外層容器的屬性都繼承下來,並且組件一旦定義就是全局的了。並且組件的屬性沒有卻份內部屬性和外部屬性,沒有了私有屬性和方法的概念,所有能被外部傳值給覆蓋。
對一些語法包裝上不是很友好,好比他寫的教程
有一次調試ie兼容終性時,終於明白他爲何要這麼寫,由於在ie8-中,this[cbName]
被包裹了一層函數,全部在ie8-下,必須執行兩次,以下
this[cbName]() // 非ie8- this[cbName]().call(this) // ie8-
固然,或許是我使用的姿式不對。
對ms-if
的設計很糟糕,對ms-if
內部的語法限制頗多。好比:教程中提到的
注意,有許多人喜歡用ms-if作非空處理,這是不對的,所以ms-if只是決定它是否插入DOM樹與否,ms-if裏面的 ms-指令仍是會執行.
正確的作法是,當你知道這裏面有非空斷定,須要用方法包起來
avalon.define({ $id: 'test', aaa: {}, show: function(aaa, bbb, ccc){ var obj = aaa[bbb] if(obj){ return obj[ccc] } return '' } }) <div ms-controller="test"> <div ms-if="@aaa.bbb"> {{@show(@aaa, 'bbb', 'ccc')}} </div> </div>
我有大量的數據,那不是要寫不少?若是ms-if
裏面還包着ms-if
呢,寫大量的這樣醜陋的代碼,太不人道了吧。到目前爲止v2.1.14還存在大量的bug,好比組件中(非組件場景沒注意)ms-if
嵌套ms-for
在ie8-不執行。
可能由於vue的做者設計出身,相比之下,vuejs的文檔設計的至關漂亮。
且不說vue支持多種語言(好像中文文檔是社區提供的),avalon的教程中充斥這大量的口語話的表達,這點尚且能夠忍。
做爲一份教程,avalon沒有很好的把使用用法,注意事項清晰系統的表述,給出的例子七零八落,甚至還夾雜着bug。
做爲一份api文檔,v1.5中只給出寥寥幾個api接口,以及一些簡單的說明;v2.0有所進步,可是連基本的完整性都沒作到,好比組件的api就沒有羅列。可能他想解釋:「你去看教程啊,裏面有寫啊!」
avalon 和國內不少開源庫同樣,沒有作好推廣工做,固然不是簡單的拉來一堆人來助威,建個QQ羣這樣的堆人模式。
以前加過不少相關技術羣,感受聊天的模式解決問題太沒效率了,不如在github上看issue提issue或者看源碼。
相比之下vue的做者在這方面更善於經營。
定義組件時用wbr
標籤兼容低版本ie,用html-minifer壓縮代碼時遇到一個問題
<!-- 壓縮前 --> <wbr ms-a="a" ms-b="b"> <!-- 當前的html-minifer v2.1.3 全部空格被壓縮--> <wbrms-a="a"ms-b="b"> <!-- 最新的html-minifer v3.0.2 只有第一個屬性前保留一個空格--> <wbr ms-a="a"ms-b="b">
可能你們對這個標籤的語意和用法理解不一樣,先給html-minfer提了個issue
根據issue上的回覆,發現這個是我本身配置的坑
avalon2.0內置了驗證組件,可是卻赤裸裸的用起了promise,說好的兼容低版本呢。並且使用時裏面夾雜着不少dom操做,不是應該數據驅動,告別dom操做
avalon2是一款基於虛擬DOM與屬性劫持的 迷你、 易用、 高性能 的 前端MVVM框架, 擁有超優秀的兼容性, 支持移動開發, 後端渲染, WEB Component式組件開發, 無需編譯, 開箱即用。
迷你 就不要內置什麼插件,我可能幾百年用不上。
易用 還真不易用,坑還真多。
擁有超優秀的兼容性 最起碼的沒作好。
組件開發 封裝性太差
支持移動開發, 後端渲染 基於以上幾點,一個不太敢用,並且沒有什麼優點可言