隨著這幾年前端技術的崛起,作為前端UI骨架的布局系統也在其中占據了越來越重要的位置。不管是在移動端、桌面端還是Web端,特別是不同設備的屏幕大小和分辨率千變萬化,如何構建良好的布局系統以便應付這些變化已經變得越來越重要。
目前,各個平臺都有自己的一套解決方案。iOS平臺有自動布局系統,Android有容器布局系統,而Web端有基于CSS的布局系統。多種布局系統共存所帶來的弊端是很明顯的,平臺間的共享變得很困難,而每個平臺都需要專人來開發維護,增加了開發成本。
Facebook在這個問題上沒有少下功夫。首先,Facebook在React Native里引入了一種跨平臺的基于CSS的布局系統,它實現了Flexbox規范。基于這個布局系統,不同團隊終于可以走到一起,一起解決缺陷,改進性能,讓這個系統更加地貼合Flexbox規范。
隨著這個系統的不斷完善,Facebook決定對它進行重啟發布,并取名Yoga。雖然目前還不知道為什么會給它取名Yoga,但從字面理解——瑜伽——我們很自然地聯想起柔韌、舒展、變化等名詞,這個跟布局系統的跨平臺特性似乎不謀而合。借助Yoga,開發人員不僅可以在React Native里,還能在各個平臺上快速地構建UI布局。
Yoga是基于C實現的。之所以選擇C,首先當然是從性能方面考慮的。基于C實現的Yoga比之前Java實現在性能上提升了33%。其次,使用C實現可以更容易地跟其它平臺集成。到目前為止,Yoga已經有以下幾個平臺的綁定:Java(Android)、Objective-C(UIKit)、C#(.NET)。而且已經有很多項目在使用Yoga,比如React Native、Components for Android、Oculus,等等。
不同于其它的一些布局框架,比如bootstrap的柵格系統或Masonry,它們要么不夠強大,要么不支持跨平臺。Yoga遵循了Flexbox規范,同時又將布局元素抽象成Node,為各個不同平臺暴露出一組標準的接口,這樣不同的平臺只需實現這些接口就可以了。
當然,Facebook不會就此止步。作為一款跨平臺的布局引擎,自然需要各個平臺的開發人員一起努力來促進它的發展,所以Facebook把Yoga開源了。目前微軟已經成為Yoga的貢獻者之一,他們不僅修復缺陷,還為Yoga帶來新的特性。
除了完全遵循Flexbox規范,Facebook還計劃在未來為Yoga加入更多特性,這些特性將超出Flexbox的范疇。
Yoga的源碼托管在GitHub上,有興趣開發人員可以在上面進行反饋。