Meta開源自家產品所使用的網頁介面樣式系統StyleX,其結合了CSS-in-JS函式庫的開發體驗,和靜態CSS的效能和可擴展性。官方指出,StyleX經過精心設計,並解決之前團隊無法封裝和擴展樣式元件的問題。

StyleX支援CSS的表達性子集,避免使用複雜的選擇器,確保生成的CSS不會出現特定衝突。StyleX並不全面支援CSS的功能(Feature),而是專注於對大型應用程式和元件函式庫中最有用,被認為具有表達力,且易於管理和維護的功能。

而且StyleX將樣式轉換與組織成為原子CSS類別名稱,使用者不需要學習或是管理實用類別名稱函式庫。也就是說,StyleX的樣式經過最佳化,拆分成更小、更具體的部分,每一個原子類別對應一個具體的樣式規則,像是一個類別僅代表邊距大小或是字體顏色,透過減少重複的CSS程式碼,使樣式更加一致可預測。

在傳統的CSS框架中,開發者會需要學習和使用大量的實用類別,雖然這些類別替常見樣式提供方便的使用方法,但StyleX自動將樣式轉換成為更精細的類別,僅需要專注於樣式的實際應用,不需要開發者額外學習和管理這些類別。

此外,StyleX允許樣式在文件和元件邊界間進行合併,這代表開發者可以在多個元件和檔案中共享和重複使用樣式規則。這對於建立自定義元件函式庫特別有用,因為開發者可在整個應用程式中一致地應用和修改樣式,同時保持程式碼的乾淨。

完全型別化的StyleX提供型別工具,讓開發者以型別安全的方式來定義和使用樣式。開發者可以精確控制元件可接受的屬性和值,像是當定義一個元件樣式時,開發者可以指定有效的CSS屬性,以及這些屬性可以接受的值。而這種機制將有助於減少錯誤,確保樣式的一致性和可維護性,能夠以更結構化和安全的方式管理大型和複雜應用程式的樣式。

開源JavaScript編譯器Babel是StyleX最重要的部分,Babel會尋找程式碼中定義的所有樣式,並在編譯時將其轉換成為原子類別名稱,同時也會把重複的部分刪除,經過排序之後寫入CSS檔案中。StyleX支援各種靜態模式,會透過使用本地常數和表達式定義樣式。除了Babel之外,StyleX還包含小型執行時函式庫,以及ESlint擴充套件。

StyleX的快速優勢,主要源於編譯的高效率以及執行時的高效能,Babel在轉換時不會明顯減慢建置速度,並且避免JavaScript在執行時插入樣式的成本,StyleX只會在需要的時候,高效組合類別名稱字串。StyleX所生成的CSS也針對大小進行最佳化,即便是大型網站的樣式,瀏覽器也可以快速解析。

Meta一再強調StyleX適用於大型且複雜的應用程式開發,StyleX透過生成精細的原子CSS類別名稱,最小化CSS捆綁包的大小,而且隨著應用程式中元件的數量增加,CSS套件的大小會逐漸趨於穩定,開發者不需手動最佳化或是延遲載入CSS檔案。

此外,Babel擴充套件也能在編譯階段,利用原子建構和檔案級快取功能,處理大量元件中的樣式。官方還提到,由於StyleX的目的在於封裝樣式,所以能夠用於單獨開發新檔案,並且即便在其他元件重複使用,也能夠以可預測的方式呈現。

Meta大量在旗下產品,包括臉書、WhatsApp、Instagram、Workplace和Threads中使用StyleX。目前,Meta在GitHub上開源的正式公司內部所使用的StyleX版本,StyleX開發工作主要在GitHub上進行,Meta會將新版本同步回內部使用。

熱門新聞

Advertisement