在今天,大前端并不是一個陌生的詞匯,我們偶爾會聽人談起它,前些天還看到卓同學寫了一篇《大前端時代下App開發者的生存之道》,說明這個詞開始成為某種共識了。
但是大前端到底指的是什么?事實上大前端并沒有明確的定義,它由國內業界發明,甚至沒有對應的英文詞匯(如果有,請悄悄告訴孤陋寡聞的筆者)。有人對發明技術詞匯不以為然,但我認為國內大前端相關技術發展相較于國外并不差,我們有必要在理論、標準方面也有所建樹,這樣才能與我們的發展情況相匹配。
上個月我在籌備GMTC2017大會的時候,走訪了美團點評的劉平川老師、滴滴的左志鵬老師、手淘的天施老師,對大前端的問題進行了深入的討論,在這里,我想用這樣一篇文章來拋磚引玉,探討大前端的定義。希望能看到更多關于它的討論和分享。
文末有大前端主題征文活動,歡迎參加。
如果分析我們到底在什么時候使用大前端,大概有三種不同的語境,在每種語境下,大前端的定義都有所不同。
在前端同學的口中,大前端有時與NodeJS一起提,有時與前后端分離一同提起,事實上,大前端概念也正是由前端同學提出,從這里,我們可以得出大前端的原始定義。
過去幾年,前端技術經歷了爆發式的發展,這種發展最重要的推動者之一就是NodeJS。NodeJS為前端建立了與系統之間溝通的橋梁,從此前端技術不僅能在服務端大放異彩,還能在本地的前端開發工具與工作流上大展身手,前端從此被解放了,JavaScript統治世界的論調一度甚囂塵上。
不過,當人們冷靜之后,發現NodeJS在服務端并沒有太多的優勢,再加上NodeJS技術本身發展的一些波折,導致它在服務端的應用并不理想。不過,前端同學還是取得了一些階段性勝利,其結果就是前后端分離。
在以前前端頁面模板由后端生成,導致在頁面需要頻繁修改的時候效率低下,前后端分離指的是后端只提供接口,前端對頁面有完整控制,同時通過中間層將前后端隔開,在這里對數據進行抽取、聚合、分發等操作。這個中間層,通常也是由前端同學負責。
從這個意義上,大前端的原始定義可以稱為前端技術的擴大化,包括NodeJS,同時對Web頁面有更強的控制權,開發承載更多功能的頁面。
移動互聯網時代到來之后,移動App成為新的主流,而瀏覽器的地位則逐漸降低,傳統的前端開發遇到尷尬。
當然,前端并未真正遭遇困境,以PhoneGap/Cordova為代表的Hybrid開發,以及內嵌在App中的WebView開發,再加上微信成為主流之后的“微信Web”,前端技術其實在移動端也有很多的使用場景。
但是,當時人們提起移動開發,主要指的還是iOS與Android原生開發技術,這一情況隨著React Native的發布得到了改變。其實直到現在,在國內外大規模使用React Native仍然不多,但是它的確能解決原生的跨平臺代碼復用、動態化等痛點,又避免了之前Hybrid的性能問題,因此受到廣泛關注。
隨著React Native的加入,前端的技術棧再次擴展。并且React Native讓我們發現,其實通過加入一個虛擬視圖層(Virtual DOM),邏輯操作和模型部分的代碼能夠得到很大程度的復用,在已有的實踐總結中,大部分React Native代碼都得到了80%以上的復用。
虛擬視圖層也不僅僅只能用在移動端,在所有通過圖形界面進行人機交互的地方都可行,在PC、Web、移動設備甚至還未發明出的未來的種種設備上,只要系統能運行JavaScript引擎,理論上都可以采用類似React Native的開發方案。這種前端技術,當然可以稱為大前端。
如果說前后端分離是前端在縱向上變大,那么這種跨不同的終端的前端技術則可以說是在橫向上變大。
在實際中,還有一種使用大前端的情況,那就是國內公司的大前端團隊/部門。據我了解的情況,目前美團點評、餓了么、網易杭研都有叫大前端的團隊或者在對外時使用該稱謂。
不過,由于之前大前端并沒有明確的定義,這些團隊的人員構成并不相同,它們都是各個公司在自己對大前端的理解,以及對公司業務的支持需求下設立的。具體情況如下(可能有偏差):
美團點評大前端團隊:包括FE、iOS、Android開發,以及一些工程化工作。
餓了么大前端團隊:以FE為主,包括NodeJS,以及Weex等。
網易杭研大前端團隊:去年底在網易杭研執行院長汪源的一次分享中,他稱網易杭研大前端的技術體系,包含Web前端、PC客戶端和移動端。
這些寫在新聞稿、印在名片上的文字,是幫助大前端概念落地的重要助力,同時也是最終確定大前端的定義到底是什么的判定依據。當然,目前案例太少,還不足以影響我們對大前端的理解。
在客戶端開發上,Native與HTML5之爭持續快十年,吵了人們都失去興趣了,從現在來看,并沒有誰取代誰,而是有融合的趨勢,融合之后的產物就是大前端。
在這里我大膽預言:大前端不僅會成為移動開發與Web前端的發展趨勢,也將會是未來的顯示設備終端的開發技術趨勢。
為什么這么說?
我們已經進入一個終端碎片化的時代,iPhone第一代發布到今年就整整10年,在這10年里,我們并沒有發現智能手機有被取代的跡象。但是創新仍在繼續,于是我們有了智能手表、TV、眼鏡、頭戴VR等等新設備,可以想象這樣的設備仍然會繼續增多。
這些新設備同時也是新平臺,與智能手機類似,可以安裝第三方應用,并且,這些平臺基本都支持瀏覽器或內嵌瀏覽器引擎。雖然有些平臺限制使用Web技術開發應用,但這只是平臺政策原因,只要放開限制,前端技術就能以某種姿態進入,甚至成為主流。
有早期Hybrid和后來的React Native的探索,在顯示終端應用的開發上,前端基本已經成為必備技術。
Serverless中文譯為無服務器架構,是軟件架構領域的一個熱門概念。這里的無服務并不是說不需要服務器,而是說新的架構取代了傳統服務器的概念。Serverless的代表是2014年亞馬遜發布的AWS lamda,后續各大云計算廠商也紛紛跟進。
對于終端開發者,并不需要太深入的了解Serverless,因此這里不過多介紹,只需要知道它被認為是云計算發展的趨勢之一。
Serverless與大前端的關系則在于,Serverless需要更強大的前端,在《Serverless Architectures on AWS》一書中介紹了Serverless的五大原則,當中有這樣一條:
Create thicker, more powerful front ends
因此,從軟件架構的發展趨勢來看,前端會越來越“大”,在整個系統中的重要性也會提升。
說了這么多,到底哪些是大前端的代表技術?從業務上來說,我認為終端開發、網關設計、接口設計、桌面端的工程化都可以算是大前端的業務范疇。具體的技術,則是基于HTML5、NodeJS的通用技術,以及各平臺的專有技術。從現階段來說,還需要掌握一些代表性的框架、平臺等。
前端框架目前有三架馬車,除了Angular之外,React與Vue都已經形成各自的生態體系。
生態的意義就是覆蓋全面,幾乎沒有短板,React和Vue已經覆蓋了目前主流的系統平臺,并且可以用React Native、Weex等框架進行原生開發,相較于其它技術有很強的優勢。
PWA是Google力推的技術,對于前端開發者來說,它代表著標準化的努力和開放的理想。雖然從目前來看,它還達不到實用階段,但從我近期獲得的一些信息表明,這項技術還是有很大潛力的,也有不少的支持者。今年可能就會有更多的實踐案例涌現出來。
微信小程序正式發布之后,與它未發布之前的火熱形成了反比,在市場上幾乎沒有聲音了。但這只是產品策略的原因,并不是技術帶來的問題。事實上微信小程序的用戶體驗很不錯,表明了這項技術的應用潛力。
小程序更多的還是為我們帶來了一種可能性,超級App成為PC時代瀏覽器的精神繼承者,成為我們新的操作系統。
最后來說說大前端帶來的影響。
移動設備作為主流的終端設備,其應用開發技術也應該是大前端最關注的技術。在以前移動開發的技術棧以原生開發為主,但以后恐怕做移動開發需要同時掌握前端技術才行。卓同學的文章也表達了這個意思。
在今年1月份的WeexConf上,天施老師分享的一段話讓我頗有感觸,他的大意是移動端經過10年演化,創新變緩,移動開發正走在標準化的道路上,所以Weex會遵循W3C的規范。而我有更深一層的理解:移動開發之前很多組件都需要靠自研,但隨著大廠更多的開源,我們在基礎組件/框架上的自研需求會越來越少,移動開發沒有W3C這樣的規范,但會有基于開源的事實標準。
所以,我認為純原生的移動開發的道路會越來越窄,整個移動開發的技術棧必須要做一個大的改變。
隨著大前端的概念逐漸深入人心,會帶來什么?我認為會出現新的職業:大前端工程師。
它與以前的Web前端的區別是,大前端將做更多的終端開發、工程化等工作,而不僅僅只是開發Web頁面。大前端工程師將能搞定所有端上的開發。與充滿爭議的全棧工程師相比,它更具可操作性。
并且,大前端工程師將會是一個擁有強大生命力的職業,因為顯示終端設備的生命力會很強,畢竟人類的信息獲取有80%以上是通過視覺,無論Amazon Echo這樣的語音交互設備如何演化,顯示終端都會有一席之地,大前端也因而不會失業。
本篇內容肯定有偏頗的地方,我所說的也不可能都是對的。希望它能引起你的思考,那么本文就達到目的了。
作者介紹
徐川,InfoQ中文站移動主編,GMTC大會主編。長期關注移動開發與前端技術發展。