專訪 | 展望前端研發工程師的 2023
近日,位元組跳動雲原生 PaaS 資深前端工程師黃健受邀參與媒體直播活動,本文整理自黃健於直播中分享的內容。
大家好,我叫黃健,2023 年是我畢業後作為專業前端工作者的第十四個年頭,時光如梭,在這些年裡,我非常有幸地親歷 PC 時代、移動互聯時代,再到今天的 AI/大資料時代,也完整見證了前端技術的高速發展。今天我很榮幸能走到臺前,和大家分享對前端技術的一些展望。
第一部分:前端工程師與雲原生
主持人:可以介紹下你在位元組跳動負責的具體工作嗎?
我目前就職於位元組跳動基礎架構的前端團隊,主要負責支援火山引擎雲原生產品的前端技術建設。
在公司內,我所在的團隊被稱為泛 PaaS 前端研發團隊,其實從團隊的名稱就可以看出,它有兩個關鍵詞:一個是泛,意為廣泛/通用;另一個是 PaaS,這是雲端計算領域的一個專業術語,“平臺即服務”——火山引擎的雲原生產品矩陣既包含 Kubernetes 基座、微服務、應用構建釋出與運維、Serverless 等平臺類產品,也包括雲原生訊息佇列、大資料檔案儲存等雲原生場景下的應用。
所以我對自己的定位是:一個在網際網路時代征戰多年的前端老兵,一個雲原生時代的技術佈道者和實踐者。雖然 base 地在北京,但是因為團隊業務遍佈全國,我作為出差狂人,經常在上海、杭州、成都、南京等城市隨機出現,歡迎大家隨時約我線下交流。
主持人:你的描述裡多次出現雲原生這個比較時髦的詞,那結合專業背景,你能具體講講前端和雲原生之間的關係嗎?包括當下前端如何應用 Serverless?
眾所周知,隨著虛擬化和容器技術的成熟,整個雲端計算市場迎來了第一個高峰期,那時候我們談論最多的一個詞叫上雲,即把傳統的物理機房、伺服器、資料庫等都搬到雲平臺上,這樣做的好處是普通使用者可以通過網際網路按需獲取各種 IT 資源,同時無需關注機房搭建、伺服器硬體採購、軟硬體更新等繁瑣事項,隨用隨走,按需付費,成本優勢非常明顯。
也正因為此,在一批傳統企業陸續上雲後,採用雲端計算的方式來搭建資訊基礎服務設施也成了新興企業的首選,這時候雲端計算市場也迎來了它的第二個高峰。
當然,因為你的平臺在誕生之初就是跑在雲上,所以這種資源使用方式會對後續架構選型、服務部署和運維治理產生深遠影響,這也就是我們現在提到的雲原生。
主持人:聽上去很有意思,可以展開說說嗎?
雲原生(Cloud Native)是一個組合詞,“雲”表示應用程式運行於雲環境中,“原生”表示應用程式在設計之初就需要充分考慮到了雲平臺的彈性和分散式特性,天生就是為雲設計,並沉澱出最佳實踐。所以雲原生既是一種構建和執行應用程式的方法,也是一整套技術體系和方法論,即生在雲上,長在雲上,天生為雲。
為了方便前端同學理解,這裡我舉個例子,比如 W3C,它為我們的網頁技術開發提供一系列標準的集合,相對應的,在雲原生領域這個組織叫 CNCF(雲原生計算基金會)。它會對雲原生給出最權威的定義,同時圍繞雲原生技術發展給出最佳實踐指導,並維護一個廠商中立的開源生態系統來推廣雲原生技術,大家經常聽到 K8s、gRPC、Prometheus 等都是這個生態下的專案。通過將最前沿的技術和解決方案開源化,讓這些創新為大眾所用。
主持人:剛才聊了很多都是雲端計算領域的概念,那作為專業的前端工程師,你能具體講講前端和雲原生之間的關係嗎?
這一個非常好的問題,前幾天稀土掘金髮布了一份《2022 中國開發者生態報告》,裡面提到了多數開發者對雲原生技術都有接觸,但瞭解較淺,每週投入時間在 1 小時以內 。但是結合自身實際工作情況來看,雲原生的很多概念其實已經滲透到了我們很多基建平臺中,越是大企業往往封裝得越好,真正做到了潤物細無聲。
這也是我們經常說的,一個好的雲端計算平臺應當讓你感受不到它的存在,但是又能真實地解決你在研發鏈路上的各種問題。
主持人:可以給大家舉個例子嗎?
前面我們有提到,雲原生不單單是一個產品,而是一套技術體系和方法論的合集,就像我們經常把網頁開發的內容概括為結構(Structure)、表現(Presentation)和行為(Behavior)一樣,雲原生裡也有四大核心要素,分別對應微服務、DevOps、持續交付、容器化,它們深刻地影響著我們的開發方式和平臺基建。
眾所周知,前端工程師現在接觸的技術領域和十年前已經不可同日而語,記得我剛工作那會兒,大家經常自嘲自己是“切圖仔”,似乎前端工程師只要在本地完成靜態頁面樣式和互動指令碼開發,然後打個 zip 包發給服務端同學,工作就結束了。
後來我們有了前後端分離的概念,前端同學慢慢需要自己去完成前端構建產物的部署:有的是推到 CDN 上,有的內網平臺也會直接掛到靜態伺服器下面。這時候大家已經會陸續接觸到如 Docker 容器、微服務平臺、CI/CD 等概念,它們本質上屬於企業級設施——這就對應了前端工程師和雲原生的第一次聯絡。
我們作為前端工程師,需要和其他工程師一樣,熟練地去使用雲原生場景下的基礎設施,而且這些基礎設施都是圍繞微服務、DevOps、持續交付、容器化四大核心要素來搭建的。這是前端和雲原生結緣的第一階段。
主持人:那還有第二階段嗎?
伴隨著 Node.js 技術的蓬勃發展,現在的前端已經慢慢地朝著大前端的概念演進,這裡提到的“大”在我們看來主要代表方向:比如跨端發展,研發在寫移動 H5 應用的同時也會接觸到安卓和 iOS 等 Native 平臺;比如全棧化發展,用 Node.js/Golang 去包辦前後端產品的開發,這些同學從能力模型上看已經很靠近服務端了。
所以服務端同學需要用到的工具平臺,現在前端也都需要了解,比如 Node.js 的服務如何部署、應用的健康度觀測如何做、服務流量上來後如何做擴縮容、線上的白屏化運維如何保障等,這些就是前端和雲原生結緣的第二個階段。
主持人:相信很多前端的同學都有聽過過 Serverless 這個詞,你在位元組跳動也在負責對應平臺的研發工作,可以向大家介紹下前端應該如何更好地使用 Serverless 嗎?
這可以算是前端和雲原生結緣的第三個階段。
Serverless 全稱是 Serverless Computing(無伺服器運算),一般的實現形式為 FaaS(Function-as-a-Service,函式即服務),當然也會包含有 BaaS 能力(Backend-as-as-a-Service,後端即服務,儲存/訊息佇列/OSS等),這是雲端計算的一種模型。
在 Serverless 概念下,基於事件驅動的全託管計算服務,計算資源會通過函式服務化,遮蔽了執行環境與機器的概念。對於開發者而言,基於 Serverless 的應用部署可以在函式級別快速實現,無需過多地關心伺服器的問題,省略了部署、運維相關細節步驟,從而極大提高軟體開發迭代效率。
圖片 這個領域的一些比較經典的產品,比如開源框架 Midway Serverless,就是一套面向 Serverless 雲平臺的開發方案,可以使用 Koa、Express 或 Egg.js 作為基礎 Web 框架,也提供了獨立使用的基本解決方案,例如 Socket.io、gRPC、Redis和 RabbitMQ 等。
這就非常適合前端/全棧開發人員用自己熟悉的語言框架去實現業務功能,同時充分享受雲端一體化應用開發體驗,程式碼完成後即可一鍵部署到 Serverless/FaaS 的環境中,開發人員不需要再關心資源配置等細節。所以 Node.js + Serverless 的組合,在未來很長的時間應該都是一個主流趨勢。
主持人:位元組跳動有什麼 Serverless 產品或者技術特色嗎?
位元組跳動在 Serverless 方向的投入是非常大的。Serverless 作為雲原生下一站,我們在大規模高彈性、資源高效分配、消費類業務覆蓋、輕量級 FaaS Worker(基於WebAssembly 的技術手段實現程序內的函式隔離,可實現極致短的冷啟動時間,函式高密部署)、雲邊一體等都有深度實踐,前端同學不僅參與了平臺的搭建,也深度支援 WebAssembly + JS 生態能力建設和開發除錯套件的維護,我覺得這些對於前端同學職業生涯的中長期發展是非常有益的。
目前火山引擎基於內部實踐開發的公有云商業化版本函式服務 veFaaS 已經正式啟動公測,歡迎大家體驗瞭解。
主持人:作為公司的老員工,你是如何親歷位元組跳動雲原生髮展的從 0 到 1 的?
位元組跳動的雲原生髮展歷程大致經歷了 4 個階段,可以看得出來和雲原生官方的推廣時間線是基本吻合的,屬於比較年輕的實踐主體,歷史包袱輕,發展腳步快。
- 第一階段是 2016-2017 年間,開始嘗試實踐 Docker & Kubernetes;
- 第二階段是 2017-2018 年間,公司業務全面實現了微服務化,為後續全面雲原生化奠定了基礎;
- 第三階段是 2019-2020 年,位元組跳動實現了核心業務的雲原生化;
- 第四階段是 2021年至今,位元組跳動內所有業務均已經實現了全面雲原生化,並且基於雲原生基礎設施,成功支援了春晚、電商大促等活動,充分驗證了其穩定性和彈效能力。
位元組跳動擁有數十萬級容器叢集規模,全面融入全球雲原生技術生態,也在為雲原生下的開源生態建設。比如火山引擎現在是 CNCF 的白金會員,我們的明星開源專案 CloudWeGo 在社群中的反響也非常好,包含有 Goalng 和 Rust 生態的各種開源元件,專案累計 star 數已經破萬。
第二部分:回顧過去,暢談未來
主持人:2022 年前端領域發生了什麼讓你印象深刻的事情嗎?
我最近專門關注了 2022 年 JavaScript 明星專案的榜單,也細讀了《2022 年前端大事記》,這些對於前端技術的發展趨勢都做了很好的總結。
最大的變化應該是大家對於前端明星專案的關注不再只圍繞前端流行庫的新特性和各種 Web 應用框架,而是把視角延伸到了如高效能+開箱即用的 JS 執行時,更豐富多彩的工具鏈生態和全棧型專案。
其中用更多原生語言來實現前端工具鏈中似乎已經成了行業均認可並且在廣泛實踐的方向,像年度榜單冠軍 Bun.js 使用了 Zig 的低階語言從頭開始實現數百個 Node.js 和 Web API,內建構建打包器,轉譯器和包管理工具,戰鬥力還是挺爆表的。Turbopack 增量打包工具釋出伴隨著 Next.js 13 的釋出更是一鳴驚人,大家從未如此在前端工具鏈上投入如此高的關注。
這些生態裡越來越多的工具都在經歷從被 JS 實現到被 Rust 重寫,效率都在數倍乃至數十倍的提升,這就要求未來前端的技術演進不單單是需要關注工具應用層,而是要對計算機系統,編譯原理,新式程式語言,架構設計能力提出全新的挑戰。
概括一下就是:前端工程師在擁有豐富武器庫選擇的同時,需要更主動激進地去探索更多工程上的極限! 當然,降本提效也是大家都在聊的一個主題,前端工程師應當要持續性地提升團隊經營意識,如何更好地為企業創造價值(省錢 vs 賺錢)。
在這個背景下,我會比較看好全棧型專案的持續推廣使用,比如 Next.js 開發商 Verce 在 2021 年就獲得 1.5 億美元 D 輪融資,估值超過 25 億美金;Figma 被 Adobe 200 億美金收購,這些團隊中的核心成員有很多都是明星前端。這也給前端團隊未來的經營起到了很好的示範作用:不僅可以挑戰新式技術,還能持續創收。
主持人:以前我們開玩笑說“前端一天一個新框架”“前端難度 18 個月翻一番”,你是怎麼看待這個問題的?
這句話應該是經典摩爾定律在前端領域的描述吧,我自己在上網的時候也經常看到這句話,我覺得可以一分為二看,一個就是前端的技術迭代確實非常快,各種技術推陳出新,這也間接地證明了這個方向本身還是非常活躍的,還在處於上升期,如果大家都不在討論新東西了,那反而需要想想是不是到了行業發展瓶頸期了。
另一個就是大家普遍關注的生存問題,在如此變化劇烈的環境下,如何更好地實現個人發展,我可以介紹下我自己的適應經驗,就是技術變化雖然快,但是這個難度更多體現在是設計原理上,應用層的使用一定是傾向於越來越簡單,不然針對新生代的開發者會很難大規模地去推廣使用。
因此我覺得可以把知識領域做些細分,做好內外兼修,像基礎知識這類屬於內功修煉,任何時候都不會過時,底子打的越牢固,適應能力也會越強,所以要戒驕戒躁,持續學習;再就是領域知識,這裡面又分通用和專用,比如前端工程化、圖形視覺化、Web 效能優化等就屬於通用知識,一般也和大家負責的業務方向緊密相關,這些可以做些深入研究,多積累行業前沿經驗,爭取成為該領域的專家;最後就是專用知識,也是大家平常討論最多的,如 UI 庫、Web 框架、新出的構建工具等各種輪子,這個變化確實非常快,和日常開發寫程式碼也最為緊密,我理解為是“術”,一般按需學習,主要考驗的是動手能力,優先滿足實際業務需要,熟練後大家的競爭差異相對較小,如果願意折騰可以多看看裡面一些比較好的設計。
主持人:但從近幾年發展來看,前端新趨勢是否逐漸變少並開始穩定?
我覺得每一個開發者都是需要去了解當下的技術新趨勢的,就像我們每年都會去關注 Tiobe 的程式語言排行榜一樣,它代表的開發者的技能能否跟上趨勢,或是否有必要作出戰略改變。
近幾年前端新趨勢變少,我覺得是行業普遍認可前端開發已經抵到達了深水區,當跑馬圈地到達一定階段後,大家就會慢慢地走向務實,從擴張模式重新迴歸到精耕模式,關注點會逐步放回腳下,把之前 70 分的工作往 90 分推進,更加註重極致效能,使用者體驗和效率提升這些老生常談的問題,也會更加註重投入產出比。
主持人:目前跨平臺比較成熟的、值得推薦的框架有哪些?你認為還有哪些框架非常有潛力可能會在未來被大家熟知或者使用的?
跨平臺一直以來都是個比較大的概念,專業術語叫:Cross-Platform,直譯為跨平臺,也叫跨端,其本質目標都是一樣的,就是希望能做到“一次編寫,處處執行”(Write Once, run everywhere),原理上基本就是提供一個標準化容器,這個容器是跨平臺的,遮蔽所有系統底層差異,封裝好系統呼叫,並對外提供了統一的 API。最典型的例子就是我們的瀏覽器核心 Blink,好處就是讓我們寫的頁面只要是按標準規範的實現,就能同時跑在多個平臺下。
目前跨端的概念發展最快的應該是在移動端領域,從早期的 Hybrid、React Native 再到現在的 Flutter 等,技術生態也一直在持續演進,所以如果說要推薦,我覺得還是要結合自己的業務發展階段和使用目標去看,我更傾向於介紹下如何去提升框架的選用標準,開發者自己做加權分,而不是具體介紹哪一個具體的框架,如下可做參考:
- 一次學習,處處編寫
- 極致效能
- 技術架構的先進性
- 規模上量後的程式碼可維護型
- 高度化的 UI 元件定製能力
- 二次開發和企業定製能力
- 開發資源豐富,社群活躍度高
跨端框架的發展趨勢和潛力有幾點可以關注:
一個是這幾年桌面應用開發的重新回暖,像桌面級的跨端開發框架我覺得熱度會持續走高,這裡面就包含成熟的 Electron 和新秀 Tauri。
第二是結合國內的現狀,小程式作為 H5 頁面形態的補充,大有持續發展的趨勢,圍繞小程式開發的開放式跨端跨框架解決方案我覺得還是比較有潛力的。
第三個是位元組跳動內部現在做的一些探索,用純 Web 技術棧去繪製 Native UI 的高效能跨端解決方案,重點圍繞全屏和半屏頁面的實現,比如大家在抖音中看到的購物商城、世界盃專題、新年活動等都是用的這類方案做的實現,主打靈活和效能。
最後是原生語言自身的演進,宣告式 API、響應式設計、元件化、函數語言程式設計這些前端領域已經非常主流的方案同樣也在影響移動端UI方案的進化,像 iOS 的 SwiftUI、Android 裡的 Jetpack Compose 都是值得長期投入的方向。
主持人:你是否在過去一年中使用過微前端相關的技術? 經常採用的微前端方案有哪些?請說說微前端的趨勢?
微前端技術我們是在深度使用中,位元組跳動內部的雲平臺從 2021 年開始改造到今天,已有了 130 個子應用的接入,我們的自身體會是微前端不只是一門具體的技術,而是整合了技術、策略和方法,可能會以腳手架、配套工具和規範約束等成體系的形式綜合呈現,算是一種巨集觀上的架構,業內也有 Single-App、Qinakun、MicroApp 等,各有千秋,只要適用當前業務場景的就是好方案,所以大家要把重點回歸到微前端需要解決的問題上。
因為微前端的使用不只是一門具體的技術,而往往是一套體系,所以大家可以更側重關注一下如何將微前端的全套體系和自己公司的基建做好結合,才能最大程度地釋放前端的潛力,具體會包括有下面內容:
- 「治理體系」:可以視為一個上線管理平臺 + 上線釋出流程,包含應用宣告週期管理,依賴管理;
- 「執行時容器」:容器承載著主應用,通過在主應用中註冊子應用的方式來實現微前端,也可看做是一種 runtime 的方案,像我們感知最明顯的 JS 執行沙箱,CSS 的隔離,路由的載入解除安裝,應用通訊都是在這裡面完成;
- 「開發配套」:給開發者提供完整的文件指引,腳手架和釋出平臺,方便應用的快速部署除錯;
- 「微物料」:微物料將微前端的粒度級別從應用級別延伸到了元件、函式級別,同時也可以讓各個接入應用可以共享平臺下的生態能力。
結合上面所說,可以看出來好的微前端方案都應該在上四個維度展開建設,目前以經典路由分發 + 資源處理的主子工程方案使用是最成熟的,開山派的 Single-Spa、阿里的 QianKun、位元組跳動的 Garfish 都是在生成環境中驗證過的;另外就是以 Webpack5 的新特性模組聯邦(Module Federation)為代表的去中心化方案,多個獨立構建的應用之間可以動態地呼叫彼此的模組,輕鬆地拆分應用,真正做到跨應用的模組共享也是業內大量實踐的。 其次還可以關注下基於 Web Components 的微前端方案,核心是元件化的思維,以元件載入的方式將微應用整合在一起作為微前端的一種手段,如果對瀏覽器執行環境無要求,業務也是全新開發的話是可以去嘗試一下的。
關於微前端的趨勢,大家可以關注一個點就是微前端的概念是出自傳奇軟體大師馬丁·福勒(Martin Fowler),他也是微服務的概念的提出者,所以關於微前端其實也可以理解為是:用微服務的思想來開發前端工程,那微服務中很多的設計的思想都是可以借鑑過來的,比如: 更完美的應用隔離(容器執行時)
- 更完善的應用健康度觀測(觀測治理)
- 更高效的應用載入解除安裝(編排排程)
- 更完善的應用間通訊(訊息佇列)
- 更精細的微前端訪問治理(流量閘道器)
- 更快速的前端展現(邊緣訪問加速,容災建設)
主持人:現在公司或組織都在向雲遷移,這是否會給使用者介面帶來新需求?前端開發人員應該如何做好相關準備?
結合雲原生的概念描述,有個觀點很重要,就是雲原生是一整套利用雲端計算交付模型的優勢來構建和執行應用程式的方法論,但是我們感知最明顯的公有云只是其中的一種形式,但類似雲的交付並不僅限於公共環境,還包含有私有云、混合雲、分散式雲等。
那作為雲原生下的前端開發,我們會面臨的第一個挑戰就是我們的產物交付,也需要能在多種雲形態之間進行平滑的切換,甚至能做到一次編寫,處處執行。這對於工程基建、物料統一、本地開發工具的完善都提出了巨大挑戰。
舉個例子,對於 C 端服務,開發人員完成一次更新後,可能所有使用者都可以快速體驗到最新的功能,但是如果是雲端計算平臺的交付產品,產品原子特性、服務版本都是需要各種靈活定製組合的,甚至不同的客戶用到的版本和功能都會有差異,這就對研發提出了很高的要求。
另一個就是增質提效了,雲端計算的平臺其實非常類似 B 端的站點開發,對於元件的豐富度、程式碼邏輯的抽象都有很高的要求,而且一旦有了異常會直接影響使用者的功能使用甚至經濟收益,同時頁面要有極高的容錯性,使用者可能會因為你的一次故障就徹底拋棄你。
前端開發人員要做的準備是應該適當跳出前端視角,從雲端計算開發工程師的角度去思考我們做的事情,按雲產品的交付標準去打磨產品,不要牴觸領域知識的學習,同時也能真正做到從開發到上線都能雲原生化,積極融入業務。另外就是雲端計算的市場空間非常大,行業中的可互相學習的產品也非常多,還是要保持積極開放的心態,多體驗多交流。
主持人:這兩年我們看到 Rust 工具融入前端生態,比如 SWC、Turbopack,那麼你認為前端工程師需要學習這麼一門新語言嗎?
在前面聊到的 2022 年回顧裡,我提到了一個概念就是前端工程師在擁有豐富武器庫選擇的同時,需要更主動激進地去探索更多工程上的極限! 目前的行業趨勢大家也不難發現,更高效能的 TypeScript/JavaScript 轉譯器已經嘗試在用第三方語言實現,例如基於 Rust 實現的 SWC,基於 Go 實現的 ESbuild 等,給前端生態帶來了全新的活力。
在位元組內部,我所在的團隊也在加大對於 Golang、Rust 語言的基建。通過 Rust 自研 JavaScript 底層工具鏈,,實現倍速級別的效能和開發體驗提升已經作為團隊的一個技術方向在推進落地,從行業趨勢來看,Vercel 和 Rome Tools 兩家明顯公司也在使用 Rust 整合整套工具鏈。 所以,未來前端工程師在穩住 JavaScript 基本盤的同時,需要再深入學習 1-2 門高效能語言已是行業共識,學起來!
主持人:在你看來,未來 TypeScript 會超越 JavaScript,成為新的前端標準嗎?
TypeScript 是種很棒的語言,顯著改善了開發者體驗。它還新增了安全層,促進工具質量提升,技術生態也欣欣向榮,網上之前有做過統計,就是八成以上的使用者在使用過 TypeScript 開發專案後都表示會繼續使用,說明大家對它的滿意度是非常高的,而且是真正地解決了開發者的很多痛點。
但是拋開語言層,TypeScript 本身也不能說就是完美的,比如效能一直以來都是 TypeScript 最受詬病的問題。由於 TypeScript 是自實現的,而且這種實現非常複雜,它的型別系統本身可以算是種迷你程式語言,這導致型別檢查的速度極其緩慢,另外它自身也存在很多缺陷,比如 allowJs 配置選項、any 型別和 intersection 型別,其型別系統根本無法保證程式碼的型別安全。
所以我更看好 TypeScript 和 ECMAScript 的標準互相對齊、持續相容,而不是互相替代。這裡給大家推薦兩篇文章:《I'm porting tsc to Go》《下一代前端語言之爭,JavaScript 要被新語言反超?》。
主持人:前端從業者需要掌握哪些工程化技術?
廣義的前端工程化:前端工程是軟體工程的一個子類,目的是將軟體工程的方法和原理運用在前端開發中,最終實現 高效開發,有效協同,質量可控。
狹義的前端工程化:前端工程是指將開發階段的程式碼轉變成生產環境的程式碼的一系列步驟,主要包括:開發構建、CI/CD、DevOps、部署釋出、錯誤與效能監控、自動化測試等。
綜上,需要覆蓋從開發到線上的完整流程,儘量做到開發快、測試準、部署穩,同時做好對應的配套平臺建設。前端工程化的的最佳實踐網上都可以找到很多公開資料,對於這塊各個公司都非常願意拿出來交流,我自己也經常關注技術媒體的專家主題分享,收穫挺大的。
主持人:您如何看待 WASM 在未來的發展趨勢?我們前端從業者需要掌握這門技術嗎?
WebAssembly (縮寫 WASM)是一種可執行在現代網路瀏覽器中的新型程式碼,它的設計目的不是為了發明一種新的程式語言,而是為如 C、C++ 和 Rust 等語言提供一個高效的編譯目標。它在安全的、可移植、輕量化、高效率的虛擬機器沙箱中執行,並且可以在不同平臺上實現接近本地的執行速度,具有天然的輕量、安全、快速等優勢。
在瀏覽器端,它主要適用如下場景:
- 將 C、C++、Rust 等高階語言編寫的程式移植到瀏覽器,例如 PhotoShop 的線上版、Figma 等;
- 圖形影象處理領域,如:檔案解析,加密處理、資料視覺化等對 Web 應用有較高效能的提升場景;
- 音影片編解碼等,比如 FFmpeg 與 WebAssembly 實現純前端影片截幀這種流媒體下的解決方案。
不止於瀏覽器,還有云端環境。 值得一提的是,WASM 的輕量級、安全模型、隔離性使得它在廣泛的環境中都可以使用,只要需要提供一個符合 WebAssembly 標準規範的虛擬機器環境,從邊緣雲到 IoT,再到函式計算領域,都可以作為類似 Docker 的輕量級替代方案來使用。雲原生社群最近釋出了一篇《2023 年 WebAssembly 技術五大趨勢預測》也是非常值得讀一下的。
作為開發者,我一直有個觀念就是:專案裡我可以不用,但是技術上我不能不懂!
主持人:你認為在 2022 年及以後,前端開發人員需要具備一些虛擬現實 (VR) 和增強現實 (AR) 的技術知識嗎?
這個概念目前還是比較前沿的,我可能沒法直接從技術角度給出分析,但是可以看看目前資本的走向和政策引導趨勢。
2022 年以來,華為、三星、索尼等大廠紛紛在 AR/VR 終端和各類裝置中持續佈局,期待新產品的推出提升使用體驗,推動硬體滲透率提升。據統計 2022 年全球元宇宙產業共發生了 704 筆融資,總金額達 868.67 億元。伴隨重量級廠商入局, VR/AR 產業生態日益成熟,加之技術迭代發展、內容生態擴容、產品出貨量增長。
國家和地方層面持續推出激勵政策。在政策指引方向,據統計,我國有 15 個省市政府出臺了 29 項元宇宙專項扶持政策,市場對 Web3 在傳統網際網路升級的重要作用和技術方向的創新性的認識已經逐漸清晰,未來 3 年元宇宙/Web3 將可能出現 DAU 超過 1 千萬的區域性大規模應用,提前做好佈局準備。
舉個例子,過去疫情期間,大家都會越來越多地採用雲上的方式解決實際生活中的實際剛需問題,比如線上租房看房、AR 試穿鞋子衣服、家庭裝修效果預覽等,這些都是作為實體行業的補充增強,可以考慮朝 VR/AR 的賽道做些轉型嘗試,但是需要保持足夠的熱情和耐心。
主持人:2023 年前端技術領域您判斷會出現哪些比較重大的變化?對於前端從業者在 2023 年可能面臨的最大挑戰會是什麼?
我自己比較關注的幾個方向:
-
人工智慧(AI)應用加速,慢慢地從幕後走向臺前,由於 AI 變得更容易獲取、成本更低,人們對 AI 的應用正在加速。無論是在分析最新資料方面,還是在如何最好地處理問題給出建議方面,AI 都能幫助人類理解這一切。前陣子,AI 聊天機器人 ChatGPT 爆火,能夠寫程式碼、修復 bug 甚至寫小說,推出五天直接突破了 100 萬用戶,也讓其母公司 OpenAI 的估值翻了一倍,還有 GitHub Copilot 和開發工具的深度結合已經讓開發者在持續深度使用,未來利用好這些 AI 基建設施,前端可以更容易地做出更多有創意的平臺或產品。
-
前端職能泛化,前端開發者朝著全棧開發者的成長會越來越顯著。外部因素,全球疫情後的經濟復甦,企業更加註重降本提效,用更少的人辦更多的事。內部因素,伴隨雲基礎設施的完善,多語言的探索嘗試,開箱即用的一體化框架持續強大,開發者自身也願意更前一步,逐步去適應產品開發的全流程,從介面到介面,從架構設計到程式碼落地,從自動化測試到運維等等,擁有全鏈路技術有益於技術的閉環,提升個人能力和價效比。
-
越來越多的前端明星產品會由系統級原生語言來實現。2022 年可以看作是高階語言在前端工具鏈大放異彩的一年,前端對於高效能系統級語言的學習熱情也在持續走高,大家也不限於隔著各種執行時去和系統做互動,相信到了 2023 年隨著基礎層能力的不斷補齊,在平臺層、業務層,前端的創造力都會被更大的釋放,會有更多精彩的作品被打造出來。
-
Serverless 的概念會越來越被接受,更多的 Node BFF 應用會優先跑在 Serverless 平臺上,各種 Web 框架在特性更新也會持續加大針對於 Serverless 的優化,資源成本低、高可用、免運維、開發成本低的優勢也會被持續放大,對應的開發者生態,如本地環境、除錯工具、應用市場等也會得到持續發展。
-
低程式碼發展呈現齊頭並進的局面,面向使用者側,在應用層越來越多基於低程式碼搭建的場景將被續推廣落地,產品會持續變的好用易用;面向專業開發者,低程式碼引擎類的產品強化會越來越被重視,讓上層開發者搭建平臺變得更容易更快速,引擎開發者自身也會持續關注能力的不斷抽象輸出。同時,配套的低程式碼和無程式碼雲服務也會持續發展。
-
前端開發者與世界的聯絡會越來越緊密,目前在 Vue/React、TC39、W3C 等社群中活躍著越來越多影響世界的中國前端開發者,且大有年輕化的趨勢,開發者對於新技術的快速跟進和落地在過去的幾年裡都有了顯著的提升,一線優秀的理念從誕生到驗證落地會做得越來越快,未來我們不僅僅是技術的追隨者,也會是參與共建者。
對於開發者的挑戰,可以參考阿里巴巴的年度詞:進,以奮進之心,迎接全新一年。同時再分享一下我們團隊的年度關鍵詞——突圍:走出舒適區,衝出瀏覽器。不再定位成業務的追隨者,需要更主動地去做些產品形態和技術驅動上的革新,讓前端開發者在更大的舞臺上去體現專業價值。
第三部分:職業發展,未來前進
主持人:在大公司和小公司工作,前端技能上有什麼不同嗎?
我覺得技能上應該沒有本質區別,只是接觸到的資源和可以探索的方向不大一樣,大公司裡的基建一般比較完善,有著很清晰的工程師能力模型以及職業發展規劃,所以大家確實在技術視野上要好一些,可以用到的資源也豐富不少。
但是也存在一個問題就是人員越多分工則越細,如果自己不主動破局,時間長了就成了流水上的螺絲釘了,需要持續想想自身的獨特價值和不可替代性。小公司我覺得大家要多把自身的成長與企業的發展結合好,關注當下痛點問題,在精不在多,用更少的資源辦更多的事,同時也可以多主動同社群同行交流,拓展技術視野。
主持人:相對後端來講,學習前端這門技術會更有前途嗎?
任何行業能做到頭部的 5%,都會非常有前途,從前面聊到的趨勢來講,我們也認為未來前後端的邊界會越來模糊,知識體系也會不斷交融。
前幾年因為行業處於擴張期,無論是新品孵化還是使用者增長都需要前端去創造產品的形態,在 APP 端、小程式、H5、企業中後臺都存在大量的崗位需求,但是隨著行業開始步入平穩期和深耕期,大家需要把工作重新放回工作效率,研發成本和極致效能上。
舉個例子,企業用人資源緊張的情況下,讓一個後端的開發者去使用下前端的基建框架,湊合湊合他們是具備上手能力的,但是反過來讓前端去臨時支援下後端的業務,那上手的門檻依舊不低,最後你會選擇用哪個應對方案,結果顯而易見。
主持人:有同學問說,前端工作需求很多,老是改來改去,實際工作中也是產品決定業務邏輯,那麼相對來說從事底層基礎服務會不會更有挑戰和職業未來?
這是一個圍城現象,外面的人想進來,裡面的想出去,很多做基礎服務的同學也會經常找我吐槽,會面臨如下困境:辛辛苦苦折騰出來的工具或者技術方案推不動,業務側覺得夠用就好,在收益有限的情況下引入新工具會帶來額外的成本,服務寫好了還得做培訓當客服,做底層方案很難直接共享到爆款業務快速增長的紅利,做了好一陣子的技術方案結果社群出來了個更好的直接就被降維打擊了等等,其實很多從事底層的基礎服務的同學也時常想著回業務中去。
解決思路:工作不分高低貴賤,重點還是要關注當下的痛點問題是什麼,適合用哪種方式去解決,解決過程中技術可以帶來哪些提升亮點,無論是技術還是業務只要能持續提升標準,都是非常有挑戰的。
主持人:零基礎小白應該怎麼學習前端才能少走彎路?
- 多看多練,一萬小時定律是繞不開的,看書,看影片,看文章可以交替著來,但是一定要有個完整的知識圖譜。
- 多聊多問,與社群一同成長,我自己也是非科班出身,但是非常感謝一路過來指導過我的很多前輩。
- 找到自己的擅長方向,嘗試做出有自己特色的代表作品,在未來的發展中會有加分項。
主持人:以老師見過的一些例子或自身經歷來說,我們如何成為一名優秀的、出色的前端工程師?有什麼特定的技能或特質可以讓我們成為一名強大的前端開發人員嗎?
- 不設邊界,保持學習的熱情,多折騰,前端工程師中工程師的特徵要能被持續放大。
- 持續學習,尤其是關注基礎知識修煉,當初因為快速入門而淡忘的知識,未來也會隨著時代的發展被要求償還。
- 學好英語,發現更多的機會,在更大的舞臺上去展現自我。
勞逸結合,未來的道路很長,身體才是革命的本錢 ——《小妖怪的夏天 · 媽媽嘮叨》
主持人:如何在一門技術上做到精通?比如深入理解一門框架工具,如 React.js?
推薦一下費曼學習法和番茄工作法,然後把一個知識點的來龍去脈都徹底弄清楚;
主持人:前端工程師還應具備哪些出色的 “軟技能” ,例如溝通和團隊合作?
- 良好的溝通表達:前端經常處於多個業務的交叉點上,天然具有聯結器屬性,需要增加自己的表達溝通能力。
- 保持積極樂觀:對事情的不確定性保持樂觀,你會更願意去嘗試,才有更多收穫成功的可能,努力走出第一步。
- 做事不設邊界:很多問題從前端介面暴露出來,但是最後的解決往往是在後端,資料或者產品側,但是一定不要抱著不是我的問題我不管的思想,始終堅持自己也是產品的一部分,要為最終結果負責。
- 堅持寫作分享:文字沉澱和口頭表達能力都是職業發展過程不可或缺的能力,甚至是加分項。
- 開卷有益: 短影片時代都是碎片化的資訊找人,可以靜下心來,多選些好書精讀一下,推薦:《軟技能 2:軟體開發者職業生涯指南》。
主持人:新年新開始,老師對正準備跨進前端的技術人或者正在前端領域工作的技術人們有哪些寄語或者建議呢?
過去的 2022 年是個非同尋常的一年,相信大家都感受到了近幾年來比較嚴酷的外部環境和業務挑戰,不過套用一句時髦的話來說就是“感覺辛苦,是因為你在走上坡路”,新的一年我們一起出發,未來加油!
- Flink OLAP 在資源管理和執行時的優化
- 位元組跳動混沌工程之雲原生場景實踐
- 位元組跳動湖平臺在批計算和特徵場景的實踐
- 專訪 | 展望前端研發工程師的 2023
- State Migration on Flink SQL
- 從100w核到450w核:位元組跳動超大規模雲原生離線訓練實踐
- 打造通用快取層:位元組跳動 Flink StateBackend 效能提升之路
- Flink OLAP 助力 ByteHTAP 亮相資料庫頂會 VLDB
- Flink 流批一體在位元組跳動的探索與實踐
- 提速 10 倍!深度解讀位元組跳動新型雲原生 Spark History Server
- 位元組跳動 Flink 基於 Slot 的資源管理實踐
- 位元組跳動開源自研 Shuffle 框架——Cloud Shuffle Service
- 9年演進史:位元組跳動 10EB 級大資料儲存實戰
- Go 生態下的位元組跳動大規模微服務效能優化實踐
- 位元組跳動基於大規模彈性伸縮實現拓撲感知的在離線並池
- 5年迭代5次,抖音推薦系統演進歷程
- 億級使用者背後的位元組跳動雲原生計算最佳實踐
- KubeZoo:位元組跳動輕量級多租戶開源解決方案
- 位元組跳動10萬節點 HDFS 叢集多機房架構演進之路
- 位元組跳動的 Flink OLAP 作業排程和查詢執行優化實踐