LinkedIn開源軟件項(xiàng)目:(原文http://www.infoq.com/cn/news/2016/08/LinkedIn-RocketData-LayoutKit-UR)
1廊敌、Rocket Data(只有swift版本)
Rocket Data是有持續(xù)同步層的非阻塞、不可變模型管理系統(tǒng)号涯。它可以使用任何類型的緩存愚争,可以使用簡單的API來輕松地掛接到鍵值型存儲上毒返。
從2015年早期重寫LinkedIn旗艦版應(yīng)用時(shí)開始,他們就在尋找一個(gè)可用的緩存系統(tǒng)來把內(nèi)容展現(xiàn)給用戶腊嗡,而內(nèi)容要從網(wǎng)絡(luò)上加載着倾。總的來說對這套緩存系統(tǒng)的需求是:
不可變燕少,線程安全模型卡者;
模型在內(nèi)存和緩存中一致。這樣在更新模型之后客们,所有其它實(shí)例中的這個(gè)模型都會跟著更新虎眨;
讀寫操作都是非阻塞式的蟋软;
簡單的數(shù)據(jù)淘汰策略;
在有大量模型類型嗽桩、模式和監(jiān)聽器時(shí)可以容易擴(kuò)展岳守;
自動遷移;
他們調(diào)查了當(dāng)時(shí)業(yè)界的各種現(xiàn)有解決方案碌冶,包括Core Data湿痢、URL Cache、Realm扑庞,以及直接將模型寫入磁盤的方案等譬重,但找不到哪種方案可以滿足上述所有需求,或者保證不可變模型的一致性——這是他們最看重的罐氨。于是他們決定自己寫一套臀规,就是Rocket Data,它的架構(gòu)如下:
每一個(gè)視圖控制器都有一個(gè)或多個(gè)數(shù)據(jù)提供者的引用栅隐。有兩種類型的數(shù)據(jù)提供者:正規(guī)數(shù)據(jù)提供者持有對單一模型的引用塔嬉,集合數(shù)據(jù)提供者持有對模型的有序數(shù)組的引用。兩種數(shù)據(jù)提供者都可以很容易很快速地完成數(shù)據(jù)存取租悄,因?yàn)槟P投急4嬖趦?nèi)存中谨究。
Peter Livesey這樣評價(jià)這套系統(tǒng):
有了這套緩存系統(tǒng),開發(fā)者只需一點(diǎn)點(diǎn)額外工作就可以輕松地為項(xiàng)目添加緩存了泣棋。緩存和數(shù)據(jù)提供者都是自動保持一致的胶哲。除了每周為一些模型添加模式之外,我們再也不必為遷移增加任何代碼潭辈。最重要的最鸯屿,我們程序從來不會因?yàn)镃ore Data異常而崩潰。
LayoutKit
LayoutKit是一個(gè)高性能的iOS應(yīng)用視圖布局庫把敢。
LinkedIn非常在意手機(jī)應(yīng)用的性能碾盟,可第一版的手機(jī)應(yīng)用性能卻非常不盡人意,調(diào)查后發(fā)現(xiàn)原因是主線程在運(yùn)行Auto Layout時(shí)花費(fèi)了過多時(shí)間技竟。Auto Layout是iOS提供的布局引擎,可以自動計(jì)算視圖在屏幕上的大小和位置屈藐。
據(jù)LayoutKit的開發(fā)者之一Nick Snyder說榔组,他們當(dāng)初也做了許多嘗試。他們試過手工寫布局代碼联逻,但發(fā)現(xiàn)這樣會非常難以維護(hù)搓扯。所以總之需要的是在保證性能的前提下,將布局功能封裝起來的可重用模塊包归∠峭疲可是調(diào)查了現(xiàn)有方案之后,仍是發(fā)現(xiàn)雖然Auto Layout給大家造成了很大困擾,但合適的方案還是找不到换可,于是決定自主開發(fā)椎椰。與Auto Layout相比,LayoutKit的主要優(yōu)點(diǎn)有:
速度快:性能可以與專門寫的定制的布局代碼相媲美沾鳄,比Auto Layout快非常多慨飘;
異步:在后臺線程中做布局運(yùn)算,所以不會干擾與用戶的交互译荞;
聲明性的:用不可變的數(shù)據(jù)結(jié)構(gòu)聲明布局瓤的,這樣更容易開發(fā)、審核吞歼、調(diào)試和維護(hù)布局代碼圈膏;
可緩存的:布局結(jié)果都是不可變的數(shù)據(jù)結(jié)構(gòu),所以可以在后臺線程中計(jì)算并緩存篙骡,可以非常大的提升性能稽坤;
而且LayoutKit還很好用:
UIKit友好:LayoutKit生成UIView,也提供適配器來方便與UITableView和UICollectionView一起使用医增;
國際化:可以自動為從右到左的語言調(diào)整視圖慎皱;
Swift:可以在Swift應(yīng)用中使用;
成熟:單元測試覆蓋率超過90%叶骨,已經(jīng)用于最新版的LinkedIn iOS應(yīng)用茫多;
LayoutKit比Auto Layout快八倍,性能可以與專門寫的定制的布局代碼相媲美忽刽。它快在專用的布局算法天揖,而且它也不會為布局創(chuàng)建它并不需要的UIView。所以開發(fā)者可以用它隨意的去組合布局跪帝,再也不用擔(dān)心性能問題了今膊。