Facebook內部是如何使用JavaScript和GraphQL的
最近, 來自 Facebook 的 Lee Byron (@leebyron) 在Hashnode上主辦了一場 AMA( Ask Me Anything )。 這裡提出了許多有趣的問題,並且 Lee 透露了一些關於 Facebook 如何使用 React 、GraphQL 、和 React Native 的驚人事實與細節。我拜讀了他在 AMA 上的回答,思考並總結出了十條有趣的重點。
那麼,開始吧。
React 背後的靈感?
React 一定程度上受到了 XHP 的啟發,來自 Facebook 的 Marcel Laverdet 在2009年建立了此專案,用於模組化 Facebook 的使用者介面。詳見這裡。
Facebook計劃用React Native 重寫他的移動應用嗎?
好吧, 答案是 : 他們已經這樣做了。 有一部分 Facebook 的應用使用了 React Native 構建,也有一部分不是。 詳細的答案見這個討論.
哪些場景正在使用 Immutable.js ?
Ads Manager 和他們基於 React Native 的 Android 和 IOS 應用。
Messenger 網站 (messenger.com)
用 Draft.js 寫的新文章。
在 Facebook News Feed 上所有的評論。
Facebook 如何為 React 元件寫 CSS ?
Lee 透露到他們禁止匯入 CSS 規則到除 React 元件以外的任意檔案。 這樣不僅確保了一個元件經由格式化的屬性所應該暴露出的正確的 API ,同時其他的元件不能夠通過匯入一個規則來覆蓋他。 此外,他們並不需要通過 JavaScript 的一些技巧來匯入 CSS 檔案。相反,他們遵循Button.js 臨靠 Button.css 的規範。詳見 這裡。
Facebook 會隨著每個 React 重要發行版而更新 React 元件嗎?
是的,他們會。
Facebook 通常將 React master 分支用於生產環境
從2012開始,React API 並沒有進行多少重大的更改。 因此,React 團隊也很少面臨必須更新元件的狀況。
如果有突發的更新,React 團隊的成員 Ben Alpert 將會負責程式碼庫的所有同步工作。
他們也會使用類似 jscodeshift 的自動化工具去簡化問題。
GraphQL 背後的故事是什麼?
GraphQL 誕生於2012年,當時 Lee 正在 IOS 組致力於 News Feed 。 當時,在一些網路環境糟糕的地區,Facebook 正急速增長。 因此, GraphQL 最初被設計於應對緩慢的手機連線。 不久,當 Relay 正準備開源時,他們認為缺乏 GraphQL ,Relay 的開源就沒有多少意義。 同時,他們也意識到 GraphQL 服務編寫得很巧妙並且大多數 Facebook 以外的公司都未嘗使用過。因此,他們決定通過編寫一個語言無關的規範來發布它。那就是 GraphQL 背後的故事。詳情可閱讀 此處 的回答。
Facebook 正在什麼場景使用 GraphQL ?
Facebook的 Android 和 IOS 應用 幾乎全部依賴於 GraphQL 支援。 在一些情況下, 如Ads Manager,整個應有都在使用 Relay + GraphQL 。
是的, Facebook 重度依賴 SSR 。儘管如此,Lee 說他們很少有在伺服器使用 React 渲染元件的場景。這個主要取決於他們的伺服器環境。
Facebook 使用 Node.js 嗎?
Lee 說他們有許多客戶端的工具由 Javascript 編寫並通過 Node 執行。remodel 就是這樣一個通過 npm 安裝的工具.他們所有的 IOS 和 android 上的內部 GraphQL 客戶端工具都在使用 Node 。但是他們在伺服器端使用 Node 並不多,因為迄今都沒有一個強烈的需求。 即使某一天他們想在伺服器端使用 Javascript (例如:在伺服器上渲染 React ),他們也會直接使用 V8 引擎而非 Node 。
Falcor (by Netflix) 對比 GraphQL 如何?
據 Lee 所說, 兩個工具都在嘗試解決類似的問題。當 GraphQL 團隊第一次聽說 Falcor 時,他們與 Netflix 團隊見了一面並交換了一些想法。雖然如此,Falcor 與GraphQL 之間還是有許多區別的。閱讀 此處 的回答可以知道更多。
我希望你能喜歡這份非常簡短的總結。 詳細的回答與討論請移步 AMA 頁面。
文章轉載自 開源中國社群[http://www.oschina.net]
相關文章
- JavaScript是如何工作的:深入類和繼承內部原理 + Babel和TypeScript 之間轉換JavaScript繼承BabelTypeScript
- JavaScript內部物件和Date物件JavaScript物件
- JavaScript 是如何工作:Shadow DOM 的內部結構 + 如何編寫獨立的元件!JavaScript元件
- Facebook內部高效工作PPT指南
- Python 內部:可呼叫物件是如何工作的Python物件
- kafka的內部實現、安裝和使用Kafka
- Java內部類和匿名內部類的用法Java
- Facebook是如何管理程式碼的
- JavaScript之內部陣列JavaScript陣列
- 如何判斷函式是否是javascript內建的函式JavaScript
- CPU內部的奧秘:程式碼是如何被執行的?
- Duolingo 的內部測試是如何運作的Go
- 民宿Airbnb愛彼迎是如何使用GraphQL和Apollo快速擴大規模10倍?AI
- 耐克公司是如何將API切換到GraphQL的?API
- 內部類中的成員的定義和使用
- 譯—JavaScript是如何工作的(2):V8引擎內部+優化程式碼的5個技巧JavaScript優化
- 黑客集團內部是如何運作的?它們也有CEO和專案經理黑客
- rails graphql的使用AI
- 菜鳥學SSH(十六)——Struts2內部是如何工作的
- 如何在Docker內部使用gdb偵錯程式Docker
- Facebook 工程師是如何高效工作的?工程師
- Facebook工程師是如何高效工作的?工程師
- JavaScript 深入解剖bind內部機制JavaScript
- Javascript是如何工作的JavaScript
- JavaScript 是如何工作的:JavaScript 的共享傳遞和按值傳遞JavaScript
- 管控內部威脅,資料如何安全使用?
- 如何刪除字串內部的空格字串
- Flakes是企業內部管理系統使用的UI模板開發框架UI框架
- 開始使用GraphQL Java和Spring BootJavaSpring Boot
- 據說是聯想內部維修指南
- Facebook內部資料:產品設計評價體系解密解密
- SAP Cloud for Customer框架是如何使用JavaScript Promise的Cloud框架JavaScriptPromise
- Javascript是如何工作的: Engine, Runtime 和 Call Stack的概述JavaScript
- 織信OA考勤管理系統是如何解放企業內部考勤的?
- JavaScript是如何工作的:使用MutationObserver跟蹤DOM的變化JavaScriptServer
- Facebook 是如何做大規模程式碼部署的
- 靜態內部類和非靜態內部類區別
- 每日安全資訊:黑客集團內部是如何運作的?他們也有 CEO 和專案經理黑客