最近看了一篇深度好文,講的是資深老前端對于前端現狀的看法:2016年前端技術觀察。我覺無論是跨界還是新進入前端行業的同學都應該看一下。
我自己看完后感觸頗深,因為在上家公司一直都是在寫原生的JavaScript,對于組件抽象、OO的思維方式以及如何成體系地編寫HTML5、CSS3和JavaScript頗有研究。
就像這篇文章所說,MVC的思路是:
{
m: [a_m, b_m, c_m],
v: [a_v, b_v, c_v],
c: [a_c, b_c, c_c]
}
而組件化的思路是:
{
a: [a_m, a_v, a_c],
b: [b_m, b_v, b_c],
c: [c_m, c_v, c_c]
}
組件化完全是抽象的,你不用去考慮里面的實現細節,只需要知道它暴露的接口(反映到相應的屬性、方法和事件),組件化難在頁面的拆分和抽象的程度,一個組件如果太過龐大,太過業務定制化,一定是拆分和抽象做的不夠。
我認為原子組件必須足夠抽象且足夠簡單,而基于它們,再去組成高度復雜或者高度定制化的業務組件。就如同CSS拆分:
.message {border: 1px solid #ccc; padding:10px; color: #333;}
.success {border-color: green;}
.error {border-color: red;}
.warning {border-color: yellow;}
不是以class
= "message-success"
、"message-error"
、"message-warning"
來表示不同的message,而是以class
= "message success"
、"message error"
、"message warning"
這種組合的方式來構成一個有特征的message。
最近在使用Node開發服務端,也在用React Native開發App,每天都在思考自己用的框架的好處與壞處,抱著包容但又有點質疑的態度敲每一行代碼。在這個過程中發現,不同的場景適用的技術也不同,知識的深度與廣度都非常重要。
其實不想做全棧,可能是想偷懶用一門語言做所有的事。但是發現專業的領域還是需要專業的知識。比如服務端,有MVC的架構體系、有登陸、有中間件、插件、有靜態資源存儲、阿里云CDN以及OSS、有數據庫設計(其實我喜歡SQL,對于NoSQL并不是很感冒)、有服務并發、熱發布等等概念,比如React Native,抽象地說你之所以能夠用JavaScript寫App,是因為Native端封裝并暴露了組件給你用,給你提供了“JavaScript運行環境”,最終的性能優化,調試還是強依賴于Native。
所以,全棧不是掌握了什么語言,重要的是它的思想,它的理念。不論用什么語言開發哪一端,不了解編程思想,就不是合格的coder。我只是恰好喜歡上了JavaScript,而它又恰好能夠開發前端、App以及服務端。
所以前端是我的深度所在,App和服務端是我的廣度,我的學習會基于這個核心思想,在這個前提下,再去深入地去學習App和服務端的開發思想。
回到前端,我一直想要把前端做到極致,把體驗做到等于甚至超過App,但其實也受限于產品,他們不知道SPA可以如何應用。比如做一個樹狀的組織結構圖,是不是history.back
就可以從當前節點平滑移動到上一次選中的節點,history.forward
就可以把視圖平滑移動到下一個節點,我們必須推動產品,讓他們了解前端到底能夠做到什么程度,這會更加利于前端行業的生態與推動。
最近還有一個概念,PWA(Progressive Web Application),不知道的同學可以Google一下,這個是Google提出的概念,漸進式網頁應用,Google自己的安卓機Nexus已經支持。它可以把網站收藏到桌面圖標,下次從桌面圖標打開,就像打開應用一樣,其實你會覺得它就是應用,但是它的運行機制是網頁。這個在國內估計很難普及,因為國內安卓機廠商都是自己改過的操作系統,很難跟著Google走,但是在國外,這個已經很普及,AliExpress就在使用PWA做應用開發。
作為一個前端coder以及熱愛前端的人,我相信前端的應用場景會越來越多,JavaScript能干的事會越來越多。說不定以后的PC應用程序、嵌入式開發、VR、AR甚至人工智能等領域都會有JavaScript的身影(有些現在已經有了)。
最后警醒自己:要不斷地增加前端領域的深度,并拓寬Native和服務端的廣度。加油~~!