成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

React團隊的技術準則

開發 前端
在本文中,我會把從他們身上學到的,濃縮為一篇較高層次的技術準則。這些準則未必詳細。它們都是我對React團隊的觀察和整理 —— 其他團隊成員或許有其他的觀點。

[[312081]]

我React團隊工作的這段時間,很幸運能夠看見 Jordan、Sebastian、Sophie 和其他團隊成員是如何解決問題的。在本文中,我會把從他們身上學到的,濃縮為一篇較高層次的技術準則。這些準則未必詳細。它們都是我對React團隊的觀察和整理 —— 其他團隊成員或許有其他的觀點。

UI優先于API

當我們把抽象概念大規模用于實踐時,難免會有怪異之處。這些怪異之處是如何在用戶界面上呈現的呢?你能看出一個應用中包含了哪些特定的抽象概念么?

抽象概念對用戶體驗有直接的影響 —— 它能創造好的、延續性的的體驗或者限制某些東西。這也是為什么我們在設計API時,并不會從抽象本身開始。相反地,我們會從用戶體驗開始,然后再回到抽象概念。

有時候當我們回到抽象概念時,會發現必須更改整個方法,才能達到正確的用戶體驗。如果我們先從API下手,就無法察覺到這點。所以,我們將UI放在API之前考慮。

吸收復雜性

簡化React內部的實現并不是我們的目標。如果產品開發者可以使用React寫出更易于理解、易于修改的代碼,我們樂于把React的內部實現變得復雜。

我們想把產品的開發變得更加職責分明,易于合作。這意味著我們必須把負責的部分封裝在React的內部。React不能被切分為小規模、耦合松散的模塊,因為這樣便無法工作。React的使命是成為協調者的角色。

通過提升抽象層級,使得產品開發者更加有力。產品開發會從React的可預測的完備系統中受益。這意味著我們推出的每一個新功能,都必須兼容已經存在的功能。設計和實現React的新功能十分困難。這也是我們核心功能并沒有收到太多開源貢獻的原因。

我們吸收了復雜的部分,防止他們污染產品的代碼。

從Hacks到Idioms

每一個Api都有一些局限性。有時,這些限制會妨礙我們打造良好的使用者體驗。為此,我們提供了一些后路(escape hatches)以供需要時使用。

Hacks并不是長久之計,因為他們很脆弱。開發者必須決定他們是否維護,支持這些Hack,或者移除hack而犧牲用戶體驗。通常大多數人會犧牲用戶體驗,不然這些hack也會有可能阻礙用戶的優化。

我們需要讓產品開發者使用這個后路,并觀察在他們實踐中都是如何使用的。我們的目標是提供這類實現一個常用的解決方法(idiomatic solution),目的是達成更好的用戶體驗。有時候,一個解決方案,會花費我們數年的時間。我們更傾向于有彈性的hack來確立完整的習慣用法(a poor idiom)。

實現局部開發

你無法在代碼編輯器做太多的事情。你可以增加幾行,移除幾行。或者復制粘貼。但許多抽象概念讓這些基本操作變得困難。

比如,MVC框架讓刪除一些render的操作變得不可靠。這是因為及即使你刪除了childern的方法,parent仍有可能執行它。相比之下,React的優勢在于:你通常能安全的刪除某些render tree內的代碼。

在設計API時,我們會假設使用它的人只熟悉他們會用到的局部代碼的相關知識。如果預期發生的影響只發生在這局部的代碼中,我們將會避免意料之外的結果。例如,我們通常假設新增代碼時安全的。在移除和修改代碼時,應該清楚指出這些改動會連帶影響、應該被考慮到的部分。我們不應該假設改動單一文件需要對整個代碼都了解。

如果某一項改動不安全,我們希望開發者能夠盡早發現這個改動所帶來的的影響。雖然可以使用警告、類型檢查和開發者工具來幫忙,但它們都受限于API的設計。如果API不夠局部性,局部開發就不可能實現。例如,findDOMNode就不是一個好的API,因為它需要全面的了解。

漸進的復雜度

有些框架會選擇在開發的路上分出岔路,提供兩種路線:簡單的方法或強大、完整的方法。簡單的方法容易學習,但你終究會走到他的極限。這個時候,你必須推倒重來,重新使用另外一套方法來實現。

我們認為實現一個復雜的東西,和實現一個簡單的東西,在結構上沒有太大的差別。我們并不會簡單的狀態提供簡單的寫法,因為這樣會使開發中出現岔路。如果我們認為開發者在開發過程中想要完整的開發工具,我們愿意犧牲低門檻來達成這件事。

有時,【簡單】和【強大】代表兩種不同的框架,那么你扔需要換框架重寫,最好能避免這種事。以React為例,增加服務端的render這類的優化會需要付出額外的努力,但你不需要完全的重寫。

控制損害

從上到下的解決方式很重要,例如代碼評估。然后長時間下來,我們的標準會下降,功能會在dead line前完成,也有可能不繼續維護產品。我們無法期待所有人都遵守規則,身為協調者的React必須控制損害。

如果有些UI相關的代碼很慢,我們需要想盡一切辦法,避免它拖慢載入時間,避免它影響其他的UI表現。最理想的狀況是,開發者只會為了他們使用到的功能付出開發成本,而產品使用者只需要載入他們會用到的UI。Concurrent Mode ,包括 Time Slicing 和 Selective Hydration ,可以以不同的方式達到理想狀態。

由于代碼庫本身的性能相對穩定,而應用的代碼沒有底線。因此我們傾向于在應用代碼中去控制損害,而不是去修正代碼庫內的代碼。

相信理論

有時我們會知道某些做法是死路一條。也許它現在可以運作,但可以想象它的局限。本質上無法依靠它來實現想要的用戶體驗。一旦有機會,我們會立刻從這種情況中抽身。

我們不想卡在這里。如果某種做法在理論上更站得住腳,就算畫上好幾年,我們也愿意在上面投入精力。在達成目標的過程中,會遇到許多障礙和務實的妥協。但我們詳細,若持續的客服這些困難,理論終究會獲勝。

你們團隊的準則是什么

以上是我觀察到的React團隊在工作時的基本原則,但我可能漏了很多。我也還沒提到React如何推出API,團隊如何溝通未來的改動方向等等?;蛟S下次可以再來談談這些。

你們團隊有什么準則呢?我洗耳恭聽。

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2012-04-24 09:58:26

2023-02-09 14:55:43

旋轉門React團隊

2023-02-02 08:41:14

React團隊Vite

2020-10-12 10:06:26

技術React代數

2022-08-22 16:23:11

React特性

2015-10-10 16:02:36

React NativAndroid

2023-03-24 12:34:56

2010-07-08 09:06:38

Web設計

2021-01-28 19:58:48

技術團隊效能

2022-06-27 07:23:20

React?并發

2022-07-06 15:07:47

React開發

2011-05-19 08:38:48

ASP

2022-05-06 07:31:01

useEventReactHook

2009-07-01 09:44:31

2018-01-29 09:42:27

創業技術團隊

2014-02-14 10:02:30

技術領導

2010-06-12 15:06:35

路由協議

2014-08-25 10:00:18

開源

2022-07-20 10:34:18

微服務架構單體

2012-12-25 11:59:56

移動團隊輔導
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产真实乱对白精彩久久小说 | 精品国产一区二区三区性色 | 九色 在线 | 91丨九色丨国产在线 | 亚洲www啪成人一区二区麻豆 | 精精精精xxxx免费视频 | www.黄色在线观看 | 亚洲精品天堂 | 日本不卡视频在线播放 | 欧美区在线观看 | 99热精品在线 | 91精品国产综合久久久久蜜臀 | 亚洲精品电影在线 | 免费观看一区二区三区毛片 | 国产在线一区二区三区 | 亚洲永久字幕 | 伊人久久精品一区二区三区 | 亚洲精久| 国产精品人人做人人爽 | 成人亚洲视频 | 免费在线观看一区二区三区 | 91大神在线资源观看无广告 | 91看片免费版 | 91佛爷在线观看 | 精品国产91亚洲一区二区三区www | 丝袜一区二区三区 | 久久av一区 | 国产小网站 | 久久福利 | 中文字幕日韩欧美一区二区三区 | 欧美在线国产精品 | 丁香婷婷综合激情五月色 | 免费一区二区 | 四虎精品在线 | 午夜男人天堂 | 欧美日韩视频 | 精品福利视频一区二区三区 | 91看片在线观看 | 日韩免费网站 | 91成人精品 | 日韩在线不卡视频 |