若干年前,一位程式員做過一個預測:
Any application that can be written in JavaScript, will eventually be written in JavaScript. (任何可以用 JavaScript 來寫的應用,最終都將用 JavaScript 來寫)
某種程式上來說,它可能是一個事實,JavaScript已經參與到應用級技術方向的各個方面,在后端,移動端,桌面端都存在它的身影,甚至連mongo shell都是支持JS語言的,
但坦率的說,這些也并非一帆風順的事情,
本周,將進入前端之變的最終章,談論我對前端技術發展的一些個人的思考與分析,本周為前端之變的最終篇,前七篇分別是:
- 前端之變(一):技術的變與不變
- 前端之變(二):不變的前端
- 前端之變(三):變革與突破
- 前端之變(四):進擊的前端
- 前端之變(五):王者歸來
- 前端之變(六):引領式變革,從命令式UI到宣告式UI
- 前端之變(七):前端的困境
在本篇中,我將試圖就以下問題做出回答:
- 前端技術是否能成為后端的主流?
- 前端技術是否能成為移動端的主流?
- 前端技術是否能成為桌面端的主流?
- 前端技術未來獨特的優勢是什么?
宣告
所有觀點僅為個人觀點,我希望觀點能引發你的思考,而不是引發對立的情緒或無意義的爭吵,
如果你看了我的觀點,認為它不對,然后自己能思考自己認為正確的觀點是如何,這就表示我這篇文章是非常有價值的,
前端技術在后端
NodeJS的火爆與好評,我在若干年前就有所感受,那時候我還只是個用Java做后端的架構師,
一個最簡單的問題是:NodeJS是否能取代Java成為后端的主流或另一種可選項?
我的意見是:
前端技術幾乎沒有可能在后端成為主流
那個不討人喜愛的Java,從未被撼動
Java這門語言很多人不喜歡,特別是很多優秀的程式員覺得它很一般,這是事實,
所以,其實不只是NodeJS,這些年來,在后端,試圖挑戰Java的多了去,類似動態JVM的語言Scala,Groovy試圖取代Java,它們都提供了Java不具備的很多語言特性,比如Scala,函式式的風格極受好評,優秀的程式員特別喜歡這樣的語言,還有類似Google的GO語言,對Java也造成了一定的挑戰,
但很可惜,包括NodeJS在內的上述這些,皆沒有成功取代Java成為主流,
其實這些語言各有特性與優點,可能Java與它們相比,確實很不出彩,但包括NodeJS在內的眾多語言,始終有兩個特性無法與Java語言相抗衡的,
- Java簡單易學,這使得基本Java語言構建一個團隊的成本較低,這是一個很重要的優勢,現在幾乎所有專案,都是團隊活動,國內的互聯網基本還處于依靠堆人的階段,選擇Java是最符合現狀的,
- Java的生態過于強大,雖然包括NodeJS,Scala類似的語言有很多獨特的做點,但在生態上完全無法與Java抗衡,現在不是二三十年前,隨便一個專案或產品都涉及到一大堆特性,存盤,分布式,快取,定時任務,集群等,Java在這些方面幾乎有著其它語言難以匹敵的生態,
再回過頭來,說下NodeJS本身的缺陷:
- JavaScript不是一個面向物件的語言,做為NodeJS的語言,它在復雜業務前面幾乎沒有優勢可言,也就是在應付復雜的業務及專案上,遠不及Java,而后端就是復雜的所在地,后端就是用來處理復雜業務的,
- 它的異步事件回圈機制確實是個極大的優勢,但這也不是非常出彩的點,其實以Java為主的后端生態也有類似的解決方案,比如Spring WebFlux,還有我用的vert.x等,同樣是異步機制,其性能還優于NodeJS,但這些本身也沒成為主流,因為連它們都無法與Java的同步執行緒阻塞的生態抗衡,在考慮生態等各方面因素下,大多數團隊還是會選擇Java傳統模式,
因此,我認為一個顯而易見的結論就是:
JavaScript語言下的NodeJS在后端無法成為主流,但它會成為另一個小眾的選擇方案
前端技術在移動端
移動端的技術呈現五花八門的發展趨勢,我曾經專門寫過一篇解讀文章,有興趣的可以閱讀下:
企業移動化資訊建設的一些思考(二)移動開發技術發展
但總體說來,前端技術在移動端的趨勢是:
以前端技術為核心的開發方式在移動端越來越成為主流方式
前端技術參與到移動端的方式主要有以下幾種:
- 網頁的方式
- App開發,以React Native為主
- Hibird的模式,以Cordova為代表
- 小程式,依賴于微信,支付寶等的生態
事實上,上述幾個方向的開發,越來越被前端技術占據,在它們的沖擊下,原生移動開發將越來越少,
雖然,React Native有式微之勢,它在對抗原生開發前并未取得優勢,而且還面臨類似Flutter的挑戰,但如果我們把目光放到整個前端就會發現,App開發本身就存在式微的趨勢,而以H5,小程式在慢慢成為業務在前端的主要實作方式,
這是因為:開發與推廣一個原生App的成本越來越高,越來越難,
原生App總體呈現數量下降的趨勢,并且可能未來會更明顯,

從中國互聯網路發展狀況統計報告2020報告上可以知道,國內App數量在2018年達到頂峰,隨后越發呈現下降的趨勢,明顯受到小程式等的生態的影響,
所以,移動端的開發人員,面臨非常嚴峻的形勢,雖然它不可能會消亡,但后面原生越來越會往平臺或H5的承載體方向發展,這是一個已經存在的趨勢,
前端技術在桌面端
以NW.js和Electron為代表的前端技術的出現,意味著前端技術現在也出現在的桌面端中了,
它會成為桌面開發的主流嗎?
它不會成為桌面開發的主流,但它意味著一個極具性價比的可選方案出現,會越來越多的出現使用這種方案的桌面應用

我在2020年開發的PCX,幾乎支持所有作業系統,甚至是國產ARM Linux系統等,
以NW.js和Electron前端技術為代表的桌面解決方案,是個非常具有性價比的方案,它具有一些獨特的優勢:
- 它開發出來的東西是跨平臺的,意味著開發一次,支持Window,Linux以及Mac系統
- 它減少了開發桌面端對開發人員的要求,與尋找原生Win或Mac程式員相比,前端人員顯然更好找,
當然,它在軟體體積,對記憶體占用,還有以Web為主的UI畢竟不適合一些專業的場景,比如游戲等,再加上在作業系統上,Windows才是主流,Mac與Linux始終是少數,跨平臺的考慮并不是剛需,意味著它不太可能成為主流,
類似的東西其實越來越多,只是大多數人沒有感知而已,國內我就隨便說幾個:
- 阿里云盤是基于Electron的解決方案
- 飛書使用了Electron技術
阿里云盤幾乎是完全使用的Electron

飛書中也有Electron的存在

前端獨特的優勢
好吧,接下來說我對前端未來最有可能發展的一個趨勢,就是前端技術具備其它技術所不具備的幾個特性,這決定它在某些方面將具有獨特的優勢,是其它技術不可比擬的,
前端是直面用戶的第一媒介
與后端不同,前端的東西基本是直面用戶的,比如網頁,小程式或桌面應用等,用戶使用這些東西時,基本就是使用前端技術編碼出來的東西,
而后端則更多的是支撐,不管后端的技識訓框架多么優秀或性能多么好,用戶并不直接使用它們,也基本感知不到,它是背后起到支撐的作用,
前端程式員最接近全堆疊程式員
想像下吧,我們拋開團隊來說,哪一端的程式員最有可能獨立做出一個完整的產品?
當然是前端程式員了,他們可以使用NodeJS撰寫后端服務,再撰寫H5網頁,或使用小程式,React Native撰寫一個移動端的產物,
想下這種場景,是不是只有前端程式員最具這種可能性?
這會產生一個什么樣的后果 ?
擁有這兩個優勢的前端,就會形成其它技術形容不了的兩個重要趨勢:
前端技術的產物更具有直接使用價值,而非支撐的東西
事實上,這不是趨勢,已經成為一個事實了,
很多程式員,包括后端程式員,使用的一些有名的產品,都是前端技術的杰作,但可能大家都沒意識到:
比如:
- 最有名的博客系統hexo,是前端技術
- GitBook,允許你快速的撰寫一本電子書
- docusaurus,Facebook出的一個讓程式員快速生成自己產品網站的開源產品,我的 https://myddd.org 就是基于它而構建的,使用它,基本你不用關心網站如何設計與構建,
- Gatsby是一個基于React ,用于搭建靜態站點的開源框架,我的 https://taoofcoding.tech 就是基于它而構建的,
可以預料的是,在前端技術的支撐下,類似的杰出的東西只會越來越多,也就是前端會產生越來越多具有直接使用的價值品,而不是和后端一樣,更多的是一些支撐框架,
前端技術將是個人英雄輩出的最可能方向
如我上面所述,如果不依賴團隊,當一個程式員有了一個idea,想獨立去實作這個想法,構建一個產品,那誰最有可能獨立做到這個事情?
當然是前端程式員了,他們有能力使用自己的技術幾乎去構建每一個方向的產品,無論是后端服務,還是網頁,或移動端App,他們幾乎都能依靠自己的技術實作,而不是去組建一個團隊,
想像下,當后端程式員為如何構建網頁與移動App而發愁時,移動端程式員為如何構建一個后端服務與網頁而無從下手時,只有前端程式員是不用為這些事發愁的,對吧,
因此,他們將大有可為,
前端與Serveless及FaaS
現在,我們正在進入云服務時代,與過往的一些基礎設施由自我管理不同,云廠商提供了各式各樣的云基礎設施,再往后我們會進入Serveless的時代,也就是無服務,
無服務并不是真的沒有服務,而是服務由云服務商提供,對于你來說,你只需要關注業務就好,而與Serveless相伴而來的則是FaaS,也就是函式即服務,
而無論是Serveless或是FaaS,NodeJS以及JS等前端技術是最合適的技術,特別是NodeJS的冷啟動時間在毫秒級,遠優于JVM秒級的水準,而對于Serveless來說,按需啟動與停止這個點對于冷啟動時間有非常高的要求,
在這一點上,雖然有一些爭論認為JVM也適合Serveless技術,但從啟動時間上來說,無疑是NodeJS更甚一籌,
我與前端
2015年,我從一個后端架構師,因為一些機緣巧合的原因去從事Android與iOS開發后,2020年,我在技術上再次發生轉變,在幾乎對前端還停留在JQuery那個理解的前提下,獨立主導與開發了PCX這樣一個基于Electron跨平臺桌面應用,它再一次沖擊了我的技術之路,使得我徹底轉變為一個全堆疊程式員,
同樣,前端技術的轉變也令我驚奇,于是我開始構思與準備寫下我對前端技術變化的一些思考與分析,這便是前端之變這個系列的來源,
我明白了一個道理:
新的技術是永恒不斷更新變化的,但本質上,它并沒有太多改變,只是形式變化了,
這些年,從Java,再歷經Object-C,TypeScript,再到Kotlin,Swift這些語言,它使我仿佛進入了一個新的世界,
我希望對所有程式員做出這樣一個建議:
永遠不要只使用一種編碼語言,永遠不要把自己局限在某個語言或方向上,不要定位自己是只能從事某一個方向開發的人,你可以專注與精通某一個方向,但你永遠要去嘗試做那些你覺得你不會的方向
這會讓你對技術的理解有徹底的轉變,開始理解與明白技術真正是什么,
這也是我在2021年開始做微言碼道(https://taoofcoding.tech)的原因所在,如同它的口號一樣:用我們微小的力量傳播編碼之道,
本系列終!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345729.html
標籤:java
上一篇:Java畢業設計-民宿管理系統
