|
從Facebook的GitHub賬戶中可以看到,F(xiàn)acebook已經(jīng)開(kāi)源的開(kāi)源項(xiàng)目有近300個(gè),領(lǐng)域涉及移動(dòng)、前端、Web、后端、大數(shù)據(jù)、數(shù)據(jù)庫(kù)、工具和硬件等。Facebook開(kāi)源項(xiàng)目負(fù)責(zé)人James Pearce曾在OSCON解釋過(guò)Facebook究竟為何要使用、支持和發(fā)布開(kāi)源項(xiàng)目。具體如下:
下面是我整理的Facebook現(xiàn)有的比較活躍的開(kāi)源項(xiàng)目列表,歡迎交流討論。 React Native是Facebook在2015年開(kāi)源的基于React.js的移動(dòng)開(kāi)發(fā)框架,它的設(shè)計(jì)理念是讓移動(dòng)應(yīng)用既擁有Native的用戶體驗(yàn),同時(shí)又可以保留React的開(kāi)發(fā)效率,提高代碼的復(fù)用率。React Native的宗旨是,學(xué)習(xí)一次,高效編寫(xiě)跨平臺(tái)原生應(yīng)用。開(kāi)發(fā)者可以使用JavaScript編寫(xiě)應(yīng)用,并利用相同的核心代碼就可以創(chuàng)建Web、iOS 和Android平臺(tái)的原生應(yīng)用,目前已經(jīng)實(shí)現(xiàn)了對(duì)iOS和Android兩大平臺(tái)的支持。 GitHub主頁(yè):https://github.com/facebook/react-native GraphQL是Facebook開(kāi)源的數(shù)據(jù)查詢語(yǔ)言。Facebook在構(gòu)建移動(dòng)應(yīng)用程序時(shí),需要用API獲取足夠強(qiáng)大的數(shù)據(jù)來(lái)描述所有的臉譜,同時(shí)簡(jiǎn)單易學(xué)易用,于是開(kāi)發(fā)了GraphQL,并支持每天千億級(jí)的調(diào)用。GraphQL不是像MySQL或Redis這樣直接面向數(shù)據(jù)的接口,而是面向已經(jīng)存在的應(yīng)用代碼的接口。你可以把GraphQL看作是為了調(diào)用應(yīng)用服務(wù)器上的方法的一些內(nèi)嵌的RPC。 GitHub主頁(yè):https://github.com/facebook/graphql Presto是Facebook開(kāi)發(fā)的一款分布式SQL引擎,主要用于針對(duì)各種大小的數(shù)據(jù)源(從GB到PB)來(lái)運(yùn)行交互式分析查詢。Facebook創(chuàng)建Presto的主要目的在于幫助他們更快地分析數(shù)據(jù),因?yàn)镕acebook的數(shù)據(jù)量一直在持續(xù)增長(zhǎng),產(chǎn)品周期的節(jié)奏也變得越來(lái)越快。自從2013年11月開(kāi)源后,Presto的用戶量呈現(xiàn)了爆發(fā)式增長(zhǎng)。諸如Airbnb、京東、Dropbox以及Netflix等公司都將Presto作為自己的交互式查詢引擎。 GitHub主頁(yè):https://github.com/prestodb/presto HHVM(HipHop Virtual Machine)是Facebook于2013年開(kāi)源的PHP執(zhí)行引擎。它采用一種JIT(just-in-time)的編譯機(jī)制實(shí)現(xiàn)了高性能,同時(shí)又保持對(duì) PHP 語(yǔ)法的充分支持。HHVM常常用作獨(dú)立的服務(wù)器,用于替代Apache與mod_php,旨在執(zhí)行使用Hack與PHP所編寫(xiě)的程序。它使用了即時(shí)編譯方法來(lái)實(shí)現(xiàn)超高的性能,同時(shí)又保持了PHP開(kāi)發(fā)者所習(xí)慣的靈活性。 GitHub主頁(yè):https://github.com/facebook/hhvm React是Facebook開(kāi)發(fā)的用于構(gòu)建用戶界面的JavaScript庫(kù),現(xiàn)已為很多公司所用,因?yàn)樗捎昧艘环N不同的方式來(lái)構(gòu)建應(yīng)用:借助于React,開(kāi)發(fā)者可以將應(yīng)用分解為彼此解耦的獨(dú)立組件,這樣就可以獨(dú)立維護(hù)并迭代各種組件了。2015年,React有兩個(gè)主要的發(fā)布,同時(shí)還發(fā)布了React Native,并且發(fā)布了新的開(kāi)發(fā)者工具。現(xiàn)在已經(jīng)有越來(lái)越多的公司(包括Netflix與WordPress)開(kāi)始使用React構(gòu)建自己的產(chǎn)品了。 GitHub主頁(yè):https://github.com/facebook/react RocksDB是Facebook開(kāi)源的嵌入式、可持久化鍵值存儲(chǔ)系統(tǒng),它基于Google的LevelDB,但提高了擴(kuò)展性可以運(yùn)行在多核處理器上,可以有效使用快速存儲(chǔ),支持IO綁定、內(nèi)存和一次寫(xiě)負(fù)荷。過(guò)去一段時(shí)間,RocksDB在社區(qū)非常流行,F(xiàn)acebook分析其原因在于它能夠?qū)τ捎诰W(wǎng)絡(luò)延遲等原因造成的慢查詢響應(yīng)時(shí)間起到消除的作用,RocksDB非常靈活,完全可以針對(duì)各種新興的硬件發(fā)展趨勢(shì)進(jìn)行定制。LinkedIn與Yahoo都是RocksDB的重度使用者。 GitHub主頁(yè):https://github.com/facebook/rocksdb 近些年,人工智能和機(jī)器學(xué)習(xí)方向取得了長(zhǎng)足的發(fā)展。據(jù)Kevin Lee透露,F(xiàn)acebook的AI軟件已經(jīng)能夠閱讀故事、回答相關(guān)場(chǎng)景的問(wèn)題、玩游戲以及通過(guò)一些例子來(lái)學(xué)習(xí)非指定的內(nèi)容。作為計(jì)算密集型的應(yīng)用,AI軟件的性能與數(shù)據(jù)集規(guī)模/硬件性能密切相關(guān)。尤其是硬件方面,高性能微處理器、存儲(chǔ)器以及圖形處理器(Graphics Processing Unit,GPU)的發(fā)展為AI算法的快速運(yùn)行提供了堅(jiān)實(shí)基礎(chǔ)。為了進(jìn)一步更好地服務(wù)大規(guī)模AI計(jì)算,F(xiàn)acebook推出了基于GPU的、用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的“Big Sur”硬件系統(tǒng)。 了解更多:http://www./cn/news/2015/12/Facebook-BigSur-OpenSource Augmented Traffic Control(ATC)能夠利用Wi-Fi網(wǎng)絡(luò)模擬2G、2.5G(Edge)、3G以及LTE 4G移動(dòng)網(wǎng)絡(luò)環(huán)境,測(cè)試工程師們可以快速在各種不同的模擬網(wǎng)絡(luò)環(huán)境中切換,從而實(shí)現(xiàn)對(duì)智能手機(jī)和App在不同國(guó)家地區(qū)和應(yīng)用環(huán)境下的性能表現(xiàn)進(jìn)行測(cè)試。ATC是Facebook內(nèi)部團(tuán)隊(duì)在2013年的一次Hackathon活動(dòng)上開(kāi)發(fā)出來(lái)的工具,其原理實(shí)際是利用了Linux流量控制系統(tǒng),通過(guò)純Python的網(wǎng)絡(luò)庫(kù)pyroute2調(diào)用netlink的API控制,而開(kāi)發(fā)其的目的是為了確保更多的用戶獲得最好的應(yīng)用體驗(yàn)。 GitHub主頁(yè):https://github.com/facebook/augmented-traffic-control HydraBase是HBase數(shù)據(jù)庫(kù)的升級(jí)版。Facebook是HBase的重度用戶,F(xiàn)acebook的HBase數(shù)據(jù)庫(kù)系統(tǒng)存儲(chǔ)著Facebook的很多關(guān)鍵業(yè)務(wù)數(shù)據(jù),包括內(nèi)部監(jiān)控系統(tǒng)、搜索索 引、流數(shù)據(jù)分析以及數(shù)據(jù)抓取等。HydraBase相比HBase穩(wěn)定性和可用性更高,可以減少服務(wù)器宕機(jī)時(shí)間。HydraBase能夠讓一個(gè)數(shù)據(jù)域分布在多個(gè)域服務(wù)器中,域服務(wù)器之間能相互備份,因此能夠大大減少數(shù)據(jù)恢復(fù)所用的時(shí)間。Facebook聲稱(chēng)HydraBase能將Facebook全年的宕機(jī)時(shí)間縮減到不到5分鐘。 Facebook已經(jīng)將HydraBase捐贈(zèng)給Apache,目前很多代碼都已經(jīng)被合并到HBase中。 WebScaleSQL是基于MySQL 5.6 社區(qū)版本改編的MySQL通用分支,基于GPL開(kāi)源協(xié)議發(fā)布。WebScaleSQL目前已經(jīng)做了很多性能改進(jìn)工作,包括:客戶端異步協(xié)調(diào)、邏輯預(yù)讀、查詢限流、服務(wù)端線程池優(yōu)化、InnoDB大頁(yè)支持等等。WebScaleSQL上的功能都是很“Web Scale”和接地氣的。比如線程池優(yōu)化,WebScaleSQL基于Mariadb的線程池實(shí)現(xiàn)進(jìn)行重寫(xiě)并優(yōu)化,對(duì)讀寫(xiě)隊(duì)列進(jìn)行分離,重新設(shè)計(jì)隊(duì)列優(yōu)先級(jí)策略,避免了餓死現(xiàn)象。要知道線程餓死在有些場(chǎng)景下是很?chē)?yán)重的。尤其是在并發(fā)連接數(shù)往往很大的互聯(lián)網(wǎng)應(yīng)用里面。 GitHub主頁(yè):https://github.com/webscalesql/webscalesql-5.6 代碼審查方面,F(xiàn)acebook開(kāi)源了可視化工具Phabricator。工程師可以在頁(yè)面上非常方便的針對(duì)每一段(單行或者多行)代碼進(jìn)行交互討論;負(fù)責(zé)審查的工程師可以接受代碼改變,可以提出疑問(wèn)要求原作者繼續(xù)修改,可以提出自己不適合以推出該代碼審查,等等。只有代碼被明確接受之后才能被工程師提交到服務(wù)器端的代碼庫(kù),這一點(diǎn)集成到提交工具中強(qiáng)制執(zhí)行。 GitHub主頁(yè):https://github.com/phacility/phabricator libPhenom是Facebook發(fā)布的一個(gè)C語(yǔ)言事件框架,用于構(gòu)建高性能和高可擴(kuò)展的系統(tǒng)。支持多線程、提供內(nèi)存管理和常用數(shù)據(jù)結(jié)構(gòu)、JSON處理。特性如下:
GitHub主頁(yè):https://github.com/facebook/libphenom Star數(shù)量:1334 Proxygen是一款Facebook開(kāi)源的支持SPDY 3.1的HTTP框架。其目的不是替換Apache,而是有能力創(chuàng)建一個(gè)專(zhuān)用的高性能Web服務(wù)器,使其可以嵌入到Facebook提供Web服務(wù)的現(xiàn)有應(yīng)用中。Facebook從2011年開(kāi)始構(gòu)建一款代理服務(wù)器(Proxygen這個(gè)名字也是由此而來(lái)),在該項(xiàng)目演進(jìn)并在生產(chǎn)環(huán)境中測(cè)試了數(shù)年之后,F(xiàn)acebook將其代碼開(kāi)源了。 Facebook內(nèi)部做的基準(zhǔn)測(cè)試表明,在一個(gè)Proxygen echo服務(wù)器上,每秒可以支撐多達(dá)304 197次基于SPDY 3.1的內(nèi)存GET請(qǐng)求。 GitHub主頁(yè):https://github.com/facebook/proxygen Pop是Facebook推出的一個(gè)可擴(kuò)展的iOS 和OS X動(dòng)畫(huà)庫(kù),其新聞聚合閱讀應(yīng)用Paper背后的核心技術(shù)就是由Pop支持。除了增加基本的靜態(tài)動(dòng)畫(huà)外,還支持Spring和衰變動(dòng)態(tài)動(dòng)畫(huà),可非常方便的構(gòu)建現(xiàn)實(shí)的、基于物理的交互。Pop動(dòng)畫(huà)庫(kù)的動(dòng)畫(huà)效果非常流暢,因?yàn)樗褂昧薈ADisplayLink來(lái)刷新畫(huà)面(幀),一秒鐘刷新幀數(shù)為60幀,接近于游戲開(kāi)發(fā)引擎。Pop動(dòng)畫(huà)的自成體系,與系統(tǒng)的CoreAnimation有很大的區(qū)別,但使用上非常相似。 GitHub主頁(yè):https://github.com/facebook/pop Mcrouter 是一個(gè)基于Memcached 協(xié)議的路由器,它是 Facebook緩存架構(gòu)的核心組件,在峰值的時(shí)候,它能夠處理每秒50億次的請(qǐng)求。Memcached服務(wù)的客戶端都會(huì)使用標(biāo)準(zhǔn)ASCII編碼的Memcached協(xié)議,所以對(duì)于客戶端來(lái)說(shuō),Mcrouter就像一個(gè)Memcached服務(wù)器;而對(duì)于服務(wù)器端來(lái)說(shuō),Memcached卻又像一個(gè)普通的Memcached客戶端。Mcrouter主要使用C 開(kāi)發(fā),且使用C開(kāi)發(fā)了功能庫(kù)部分,使用Ragel開(kāi)發(fā)了協(xié)議解析部分,使用開(kāi)源庫(kù)Folly和Fbthrift處理異步網(wǎng)絡(luò)。 GitHub主頁(yè):https://github.com/facebook/mcrouter Infer是Facebook的開(kāi)發(fā)團(tuán)隊(duì)在代碼提交內(nèi)部評(píng)審時(shí),用來(lái)執(zhí)行增量分析的一款靜態(tài)分析工具,在代碼提交到代碼庫(kù)或者部署到用戶的設(shè)備之前找出bug。由OCaml語(yǔ)言編寫(xiě)的Infer目前能檢測(cè)出空指針訪問(wèn)、資源泄露以及內(nèi)存泄露,可對(duì)C、Java或Objective-C代碼進(jìn)行檢測(cè)。Facebook使用Infer自動(dòng)驗(yàn)證iOS和安卓上的移動(dòng)應(yīng)用的代碼,bug報(bào)告的正確率達(dá)80%。Infer通過(guò)捕獲編譯命令,把要被編譯的文件轉(zhuǎn)換為可用于分析潛在錯(cuò)誤的中間語(yǔ)言格式。整個(gè)過(guò)程是增量進(jìn)行的,意味著通常只有那些有修改過(guò)并提交編譯的文件才會(huì)被Infer分析。Infer還集成了大量的構(gòu)建或編譯工具,包括Gradle、Maven、Buck、Xcodebuild、clang、make和javac。 GitHub主頁(yè):https://github.com/facebook/infer osquery是一款面向OSX和Linux的操作系統(tǒng)檢測(cè)框架。它將操作系統(tǒng)暴露為一個(gè)高性能的關(guān)系型數(shù)據(jù)庫(kù),允許用戶編寫(xiě)SQL查詢查看操作系統(tǒng)數(shù)據(jù)。在osquery中,SQL表代表像下面這樣的抽象概念:
雖然osquery利用了非常底層的操作系統(tǒng)API,但它允許用戶在Ubuntu、CentOS和Mac OS X上構(gòu)建并使用它。osquery性能極高,內(nèi)存占用小,支持用戶在整個(gè)基礎(chǔ)設(shè)施上執(zhí)行查詢。 GitHub主頁(yè):https://github.com/facebook/osquery Flow是Facebook出品的一個(gè)JavaScript代碼的靜態(tài)類(lèi)型檢查工具,該工具采用開(kāi)放源碼的OCaml(Objective Caml)語(yǔ)言開(kāi)發(fā),。Flow能夠幫助開(kāi)發(fā)人員查找出JavaScript代碼中的類(lèi)型錯(cuò)誤,從而提高開(kāi)發(fā)效率和代碼質(zhì)量。Flow已經(jīng)能夠捕獲JavaScript代碼中的常見(jiàn)問(wèn)題,如靜態(tài)類(lèi)型轉(zhuǎn)換不匹配、空指針引用等問(wèn)題。同時(shí),F(xiàn)low還為JavaScript新增了類(lèi)型語(yǔ)法,如類(lèi)型別名。 GitHub主頁(yè):https://github.com/facebook/flow Facebook開(kāi)源了Haxl,一個(gè)為高效并發(fā)數(shù)據(jù)訪問(wèn)而開(kāi)發(fā)的庫(kù)。這個(gè)庫(kù) GitHub主頁(yè):https://github.com/facebook/Haxl Facebook認(rèn)為MVC無(wú)法滿足他們的擴(kuò)展需求,因此他們決定使用另一種模式:Flux。由于Facebook非常巨大的代碼庫(kù)和龐大的組織,所以MVC真的很快就變得非常復(fù)雜,于是他們得出結(jié)論,認(rèn)為MVC不適合于大規(guī)模應(yīng)用。 每次Facebook工程師努力增加一項(xiàng)新特性時(shí),系統(tǒng)的復(fù)雜性成級(jí)數(shù)增長(zhǎng),代碼變得“脆弱和不可預(yù)測(cè)”。對(duì)于剛接觸某個(gè)代碼庫(kù)的開(kāi)發(fā)人員來(lái)說(shuō),這正成為一個(gè)嚴(yán)重的問(wèn)題。Flux是一個(gè)Facebook開(kāi)發(fā)的、利用單向數(shù)據(jù)流實(shí)現(xiàn)的應(yīng)用架構(gòu),用于 React。Flux應(yīng)用有三個(gè)主要的部分組成:調(diào)度程序、存儲(chǔ)和視圖(React 組件)。 GitHub主頁(yè):https://github.com/facebook/flux Jest是一個(gè)開(kāi)源的、基于Jasmine框架的JavaScript單元測(cè)試工具。Jest源于Facebook兩年前的構(gòu)想,用于快速、可靠地測(cè)試Web聊天應(yīng)用。它吸引了公司內(nèi)部的興趣,F(xiàn)acebook的一名軟件工程師Jeff Morrison半年前又重拾這個(gè)項(xiàng)目,改善它的性能,并將其開(kāi)源。 在最基礎(chǔ)層面,Jest被設(shè)計(jì)用于快速、簡(jiǎn)單地編寫(xiě)地道的JavaScript測(cè)試。Jest自動(dòng)模擬require()返回的CommonJS模塊,并提供了包括內(nèi)置的測(cè)試環(huán)境Dom API支持、合理的默認(rèn)值、預(yù)處理代碼和默認(rèn)執(zhí)行并行測(cè)試在內(nèi)的特性。通過(guò)在并行進(jìn)程中同時(shí)運(yùn)行測(cè)試,Jest讓測(cè)試更快地結(jié)束。 GitHub主頁(yè):https://github.com/facebook/jest Nuclide是Facebook 推出的一套基于Atom的開(kāi)發(fā)工具集,用于開(kāi)發(fā)基于Hack的Web應(yīng)用,提供自動(dòng)完成和JavaScript類(lèi)型檢查,內(nèi)建React開(kāi)發(fā)支持,并支持Facebook最新的React Native庫(kù),支持Facebook的Flow JavaScript類(lèi)型檢查器。Nuclide的設(shè)計(jì)目是為了在整個(gè)公司為工程師提供一套標(biāo)準(zhǔn)的開(kāi)發(fā)者經(jīng)驗(yàn)——無(wú)論他們從事純iOS應(yīng)用,React和React Native代碼,或者在Hack運(yùn)行我們的HHVM網(wǎng)絡(luò)服務(wù)。 GitHub主頁(yè):https://github.com/facebook/nuclide Stetho是一個(gè)Android應(yīng)用的調(diào)試工具。當(dāng)Android應(yīng)用集成Stetho時(shí),開(kāi)發(fā)者可以通過(guò)訪問(wèn)Chrome,在Chrome Developer Tools中查看應(yīng)用布局、網(wǎng)絡(luò)請(qǐng)求、sqlite、preference等等,可視化一切應(yīng)用操作(更重要的是不用root)。開(kāi)發(fā)者也可通過(guò)它的dumpapp工具提供的命令行接口來(lái)訪問(wèn)應(yīng)用內(nèi)部。 GitHub主頁(yè):https://github.com/facebook/stetho Buck受到了Google Blaze的啟發(fā),創(chuàng)建它是為了處理與多個(gè)Android庫(kù)有復(fù)雜關(guān)聯(lián)的應(yīng)用程序,從而減少構(gòu)建時(shí)間。引入Buck之后,F(xiàn)acebook開(kāi)發(fā)的四種本地Android應(yīng)用程序中使用了單一的代碼樹(shù)和構(gòu)建工具,這讓開(kāi)發(fā)更簡(jiǎn)單、更流暢,錯(cuò)誤更少。最初的38個(gè)庫(kù)在四種應(yīng)用程序之間共享了500個(gè)模塊。使用Buck替換了最初基于Ant的系統(tǒng)之后,第一次針對(duì)代碼樹(shù)運(yùn)行時(shí),構(gòu)建時(shí)間就從3分40秒降到1分30秒。 相比傳統(tǒng)的Android編譯工具,Buck憑借多核及并行技術(shù),極大加速了Android工程的編譯速度。同時(shí),多次編譯過(guò)程中,它會(huì)對(duì)未變動(dòng)的模塊進(jìn)行標(biāo)記,以增量式編譯的方式進(jìn)一步提高速度。Buck自帶編譯腳本生成功能,并提供編譯過(guò)程中單元測(cè)試的代碼覆蓋率等數(shù)據(jù)表單,還為無(wú)法用Ant工具編譯的模塊提供了便捷的編譯方式。Buck跟IntelliJ結(jié)合緊密,可通過(guò)簡(jiǎn)單的編譯腳本生成該IDE可用的工程,極大降低了本地IDE開(kāi)發(fā)后向服務(wù)器遷移的成本。 GitHub主頁(yè):https://github.com/facebook/buck Rebound是一個(gè)彈簧模型Java庫(kù),由Facebook于2013年10月在Mobile@Scale大會(huì)上發(fā)布,旨在應(yīng)用中引入真實(shí)的物理世界,創(chuàng)建讓人感覺(jué)很接近自然的動(dòng)畫(huà)。Rebound不是通用物理庫(kù),但是,彈簧模型能夠驅(qū)動(dòng)各種各樣的動(dòng)畫(huà)。Rebound的簡(jiǎn)單特性使它很容易被集成,以及作為構(gòu)建塊創(chuàng)建如呼叫、滾動(dòng)條和切換開(kāi)關(guān)等復(fù)雜組件。 GitHub主頁(yè):https://github.com/facebook/rebound 現(xiàn)在App的原型設(shè)計(jì)越來(lái)越復(fù)雜,以前使用PhotoShop制作靜態(tài)圖的方式不能滿足各種交互效果的展示,Paper的首席設(shè)計(jì)師Mike Matas在加入Facebook之初就推薦大家使用Quartz Composer來(lái)快速構(gòu)建應(yīng)用原型,而Facebook的設(shè)計(jì)團(tuán)隊(duì)也很快接收并喜歡上了這個(gè)工具,在隨后的應(yīng)用,他們遇到了一個(gè)問(wèn)題:對(duì)于產(chǎn)品設(shè)計(jì)師來(lái)說(shuō),Quartz Composer 的學(xué)習(xí)曲線太高。 于是Mike就帶頭開(kāi)發(fā)了Origami。2013年12月,F(xiàn)acebook 開(kāi)源了基于 Quartz Composer 的插件Origami,設(shè)計(jì)師可以通過(guò) Origami 能夠快速構(gòu)建移動(dòng)應(yīng)用交互原型,隨后交付給工程師實(shí)現(xiàn),值得注意的是 Origami 無(wú)需編程背景,新發(fā)布的 Paper 從項(xiàng)目設(shè)計(jì)之初所有的原型設(shè)計(jì)都是采用 Origami 來(lái)實(shí)現(xiàn)。 GitHub主頁(yè):https://github.com/facebook/origami Huxley 是一個(gè)基于Python用于Web應(yīng)用UI測(cè)試的工具,Huxley可以錄下UI操作過(guò)程,并回放自動(dòng)測(cè)試。自動(dòng)測(cè)試時(shí)和UI基準(zhǔn)對(duì)比,UI不符合預(yù)期時(shí),會(huì)保存變化的 UI 并警告你。 GitHub主頁(yè):https://github.com/facebookarchive/huxley ComponentKit 使用功能性和聲明性(declarative)的方法來(lái)進(jìn)行創(chuàng)建界面,和以往不同的是,ComponentKit 使用單向數(shù)據(jù)流的形式從不可變的模型映射到不可變的組件來(lái)確定視圖的顯示方式。ComponentKit 的 declarative 看上去和 declarative UI(QML) 差不多,其實(shí)差得遠(yuǎn)。QML 更偏向于 UI 設(shè)計(jì)的描述性,而 ComponentKit 則是做好基本 UI 和事件之間的聯(lián)系,讓事件設(shè)計(jì)和 UI 設(shè)計(jì)可以分開(kāi)單獨(dú)完成。 GitHub主頁(yè):https://github.com/facebook/componentkit FBMemoryProfiler是Facebook開(kāi)源的一款用于分析iOS內(nèi)存使用和檢測(cè)循環(huán)引用的工具庫(kù)。 手機(jī)設(shè)備的內(nèi)存是一個(gè)共享資源。應(yīng)用程序可能會(huì)不當(dāng)?shù)暮谋M內(nèi)存、崩潰,或者遭遇大幅度的性能降低。當(dāng)分配了一塊內(nèi)存,并設(shè)置了對(duì)象之后,如果在使用完了之后忘記釋放,這就會(huì)發(fā)生內(nèi)存泄露。這意味著系統(tǒng)是無(wú)法回收內(nèi)存并交予他人使用,這也最終意味著我們的內(nèi)存將會(huì)逐漸耗盡。 在Facebook,有很多工程師在代碼庫(kù)的不同部分上工作。這不可避免的會(huì)發(fā)生內(nèi)存泄露。當(dāng)發(fā)生內(nèi)存泄露之后,工程師需要盡快找到并修復(fù)它們。一些工具已經(jīng)可以找到內(nèi)存泄露,但是它們需要大量的人工干預(yù)。自動(dòng)化可以在不需要更多開(kāi)發(fā)者的情況下,更快的找到內(nèi)存泄露。為了解決這個(gè)問(wèn)題,F(xiàn)acebook做了一套工具來(lái)自動(dòng)化的處理和修復(fù)代碼庫(kù)中的一些問(wèn)題,這個(gè)工具就是FBMemoryProfiler。 GitHub主頁(yè):https://github.com/facebook/FBMemoryProfiler |
|
|
來(lái)自: tory_you > 《臨時(shí)文章》