辛宝Otto

辛宝Otto 的玄酒清谈

北漂前端程序员儿 / 探索新事物 / Web Worker 主播之一/内向话痨
xiaoyuzhou
email

Modern.js 前傳-字節現代 web開發

image.png

回看再補充:當局者迷,現在回看 Modern.js 發展,對比早期的宣貫,展露出了冰山一角。常看常新。最早發布在語雀上,現在搬運到 blog 上。

原文對應 GMTC2021 上的演講 邁入現代 Web 開發(GMTC 2021 演講《字節跳動的現代 Web 開發實踐》全文)

還有一個對應的 PDF,先不放了。

技術細節#

三個部分:

  • 整體回顧 “傳統開發” 並找到瓶頸
  • 為了解決問題,發生的變化和趨勢
  • 字節跳動的技術產出,稱之為 “引擎升級”

字節這樣的大廠裡項目多,因為體量大,前端的問題暴露得更明顯。

傳統開發和問題#

下圖是傳統的開發技術棧,讀圖。

image.png

圖中從下到上,代表抽象層從底層到頂層。最右邊三個方塊,都從最下面延伸到了最上面,代表它們都是端到端的解決方案,跟左邊的體系,以及彼此之間,都是割裂的,包含大量重複,這次分享因為時間關係,不講這幾個部分。

藍色的方塊都是代碼層面的,綠色的方塊都是平台層面的。

這套技術發展到趨於停滯,就表現了很多問題。

  • 腳手架。有結構有示例

  • 有的文件必須改,改完之後才符合實際的項目結構

  • 多個項目同一個腳手架生產,各自發展,最後發現差異會比較大,難以復用

  • 腳手架迭代了,不能對原來的項目帶來好處

  • 項目模板

  • 不同項目,模板不同,會越來越多

  • 模板不斷發展各自沉澱,有的會停止更新

  • webpack 包裝

  • 避免人人都要配置 webpack,會進行封裝、包裝,慣例

  • 包裝的抽象程度有限,配置的 api 五花八門,一複雜就還要改。規範太多

  • 編譯工具演進。除了 webpack,還有更多選擇。稱為 js 第三紀元。具體技術細節略過

  • 除了 dev build 還不夠,下圖很神,一列一列地看,這裡不展開,表達的意思是前端還有很多工作,dev 和 build 是不夠的。而且也管不到項目的底層服務。

圖中這段話來自 Redux 作者 Dan 寫的一篇文章,講 JS 工具的配置 API 的設計,這段話就是在講這方面的抽象和設計能帶來巨大的影響,有很高的門檻,需要非常嚴肅專業的對待,這種工作也需要高度的集中,而不是交給「Webpack 工程師」們搞各種各樣的「規範」。

The Third Age of JavaScript: https://www.swyx.io/writing/js-third-age

image.png

接上

  • 前端工程化。只局限到代碼層面,還到不了平台層面。(隱隱約約 serverless?)

  • react 的問題。

  • 選哪個具體技術框架。他們整逐漸統一到 react,理由是社區生態、應用規模、設計演進、設計趨勢。這塊沒啥意思,有結論就行了。

  • react 離框架功能不全

  • 去看框架級別,比如 nest,提供的後端為中心的開發,和普通 web 項目的前段關係不大,引入 node 門檻更高,從 node 到 bff 等,略過

  • 核心是:分層 + 關注點分離(下面絕對有 serverless)

參考鏈接:

Advancing the web framework ecosystem (Chrome Dev Summit 2019): https://youtu.be/QDljY2I1Pfw

NestJS Philosophy: https://docs.nestjs.com/#philosophy

The Clean Architecture: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

The BFF Pattern (Backend for Frontend): An Introduction: https://blog.bitsrc.io/bff-pattern-backend-for-frontend-an-introduction-e4fa965128bf

接上

  • IaaS 和後端 PaaS。和前端更沒有關係了。藍色應該有個統一的收口。(是啥呢,必然是 serverless)

下圖,綠色部分是底層服務。黃色和藍色是前後端。

image.png

至此,第一部分結束。

問題都拋出來了,如何解決,這是第二部分內容。

改變的趨勢#

https://2017.jsconfchina.com/files/02-modern-web-dev-dexteryy.pdf

技術在進行演變

image.png

先看藍色的:

在看橙色的 未完待續。

  • JAMstack

  • j,js -> CSR 對應單頁

  • A, apis -> BFF ContentMesh

  • Markup SSR/SSG serverless

  • SHAMstack

  • Static Hosting -> serverless

  • Apis+js

  • Markup

  • STAR app

  • meta-framework

star 是在上面兩個的基礎上組合

image.png

國外技術社區提到 meta-framework ,

本質上是把 JAMstack 和 STAR 強調的部分加起來,用以客戶端為中心的、包含更上層抽象的、通用的 Web 框架的形式,整體系統的滿足這些需求,抽象、簡化這裡面的各種模式。

還放了一張 s 曲線,來說,ui 框架趨近穩定之後,基於 react 做整合。形成新的主流技術。

參考資料

可以進入下一話題了,就是傳統開發,變成現代 web 開發,這叫範式轉移, Paradigm shift ,各種舊模式向新模式轉換。

定義現代開發#

來定義了

「現代 Web 開發」實現了在同一套程序裡一體化開發,在開發、調試、運行、部署等環節都能做到「無伺服器化」,讓前端技術棧的開發者更容易成為真正的「產品開發者」。

參考鏈接

進入第三部分

字節跳動最佳實踐#

回看,傳統和現代開發

image.png

image.png

圖中綠色代表的平台化基建,占比超過藍色代表的純代碼層面的基建。

image.png

image.png

生成了項目,完全是在線,並且可以一鍵預覽。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。