大膽預測下未來5年的Web開發(fā)
在2019年的ReactiveConf 上,《Elm in Action》的作者Richard Feldman對未來5年Web開發(fā)的發(fā)展做了預測,很有意思,分享給大家。
如果你有機會從頭做一個項目,你會怎么選擇技術(shù)棧?
這是演講開始之前Richard提的問題, 相信很多人都會選擇成熟穩(wěn)定的、主流的技術(shù)棧。
如果時間回到2006年,這個主流的技術(shù)棧就是LAMP:
L : Linux
A: Apache
M: MySQL
P : Perl 或者 Python 或者PHP
Richard在2006年創(chuàng)業(yè)的時候,就選擇了LAMP, 選擇了Perl 。但是選擇穩(wěn)定的東西并不能保證安全,Perl很快就走了下坡路,慢慢地連Perl 程序員都不好招聘到了。
所以Richard 說:“不管我們選擇的技術(shù)多么流行,多么主流,在今天多么吸引人,我們依然是在下注賭博。所以預測當前技術(shù)會向什么方向發(fā)展并且跟隨,要比一開始就盲目接受別人所用的技術(shù)要更安全一些。”
有了這么一個前提, 他的預測開始了:
1. TypeScript將會接管JS世界
到2020年底,TypeScript將會成為新的商業(yè)項目最常見的選擇。
到2025年底,每天使用TypeScript編程的程序員將超過使用普通JavaScript的程序員。
TypeScript很多人都知道,它是JavaScript的一個超集,對JS增加了靜態(tài)類型的檢查, 這個關(guān)鍵的特性受到了很多程序員的歡迎,很多錯誤可以在編譯時就被發(fā)現(xiàn),而不是遺留到運行時,并且有了靜態(tài)類型以后,閱讀、修改、重構(gòu)現(xiàn)有代碼也變得更加輕松。
從Google 趨勢來看,TypeScript正處于蓬勃發(fā)展的階段,而CoffeScript則走向下坡路。
不僅如此,很多框架都已經(jīng)支持TypeScript:
盡管如此,還有很多人不喜歡TypeScript,覺得TypeScript代碼變得像Java一樣冗長,設(shè)計也不健全,在某些情況下給人以錯誤的安全感。
Richard說預測未來的最重要因素就是看看這門技術(shù)如何影響團隊, 很多團隊都會說:“我們會嘗試TypeScript, 我們已經(jīng)使用TypeScript”, 從來沒有團隊說:“我們嘗試了TypeScript,后來又回到了JavaScript。”
值得一提的是,現(xiàn)在微軟養(yǎng)著兩位大神,都在TypeScript和JavaScript領(lǐng)域耕耘,一個就是TypeScript的設(shè)計師Anders Hejlsberg, 他同時是Turbo Pascal , Delphi, C#等知名語言的設(shè)計者。另外一位是Erich Gamma ,他專注于編輯器和IDE,設(shè)計模式,Eclipse,VS Code就是他的得意之作。
2. WebAssembly 會擴大WebApp的領(lǐng)域
到2020年末,WASM對Web的組成不會有太大影響。
到2025年末, WASM將會創(chuàng)建一個新的領(lǐng)域:“重量級的Web App”。
WebAssembly 是什么東西?可以簡單理解為在瀏覽器中執(zhí)行的“匯編語言”, 可以提供接近本地代碼的速度,肯定要比JavaScript快得多。
程序員肯定不會直接寫“匯編語言”,程序員可以用C/C++/Rust來寫程序,編譯成WebAssembly后在瀏覽器中執(zhí)行,當然,WebAssembly代碼也可以被JavaScript調(diào)用。
可能會有人說,現(xiàn)在有了V8 之類的執(zhí)行引擎,大家覺得JavaScript的性能已經(jīng)不錯了啊,為什么還要搞個Web匯編?
Richard舉了一個例子:Figma,這是一個重量級的圖像編輯軟件,像Photoshop, Sketch 那樣,但是它與眾不同的是在瀏覽器中運行的。
這個軟件是用C++開發(fā)的,最早的時候編譯成了JS的一個子集ASM.js在瀏覽器中執(zhí)行,采用了WebAssembly以后,速度提升了3倍之多。
另外一個更好的例子是游戲。比如下面這個場景,如果想使用CSS,估計是不行的, 但是WebAssembly可以搞定。
這就意味著WebAssembly打開了一扇門, 那些重量級的本地應用,可以通過Web的方式來安裝,分發(fā)了。Web瀏覽器將會和傳統(tǒng)的App Store, 安裝程序做競爭了!
以后你想用某個應用,只需要瀏覽器中輸入網(wǎng)址,立刻開始使用,不用安裝。和別人分享也非常的方便,發(fā)個link就行了。 (是不是和小程序的理念有點像?但是本質(zhì)是不同的。)
HTML/CSS/JS就此死去?當然不會,WebAssembly擴大的Web開發(fā)的基本盤, WebApp 的盤子會更大。
3. npm將在更多的問題中艱難生存
到2020年末, 至少一個npm的安全事件會登上新聞頭條。
到2025年末, 至少一個惡意的npm package 感染大量開發(fā)者的機器。
這幾年,開發(fā)人員已經(jīng)目睹了好幾次npm的災難。
2016年, 一名 npm(Node.js Package Manager)的貢獻者 Azer Koçulu 出于對 npm管理層的怨憤,刪除了自己在 NPM 的250個模塊,其中一個叫做left-pad,非常簡單,就是用特定字符填到一個字符串的左邊,達到指定的長度,但是這個模塊被引用得非常廣泛, 導致了一次NPM生態(tài)系統(tǒng)的大地震,Node.js, Babel , 還有其他數(shù)千個項目直接罷工。
2018年npm又爆發(fā)了著名的event-stream事件, 一個叫right9ctrl的家伙,騙取了event-stream這個著名package的作者的信任,獲取了代碼所有權(quán),然后向其中植入了惡意代碼。
此外npm的packagte安裝腳本中的也存在安全隱患,Richard建議在本機執(zhí)行:npm config set ignore-scripts true 。
4. JS的替代品會穩(wěn)健成長
到2020年末,編譯成JavaScript的那些語言會繼續(xù)增長,但是都沒有TypeScript增長快速。
到2025年末, 那些非JS的方言還會穩(wěn)健成長,雖然TypeScript會很流行。
JavaScript有兩類替代品,一類是JavaScript方言,如TypeScript, Dart, Coffeescript等,還有一類是非JavaScript方言,例如ClojureScript, ReasonML, 和Elm, 雖然都是編譯到JavaScript來執(zhí)行,但是它們提供的體驗和JavaScript不同。
Richard本人是Elm的開發(fā)人員,自然給Elm做了廣告,渲染速度快,體量小,不崩潰,有自己的生態(tài)體系,并且因為有非常詳細的錯誤信息而廣受贊譽。
所以Richard認為,雖然以后TypeScript會更受歡迎,但是選擇了這些小眾的替代替代品的“粉絲”將會繼續(xù)使用它們。