自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Facebook開發(fā)手記:新iOS應(yīng)用的背后

移動(dòng)開發(fā)
Facebook上周發(fā)布了新版iOS應(yīng)用。Facebook工程師Jonathan Dan在Facebook官方頁面中撰文,介紹了新版iOS應(yīng)用,F(xiàn)acebook iOS應(yīng)用的發(fā)展歷程以及開發(fā)思路。

  

[[93518]]

 

  Facebook是如何做iOS應(yīng)用的?

  Facebook上周發(fā)布了新版iOS應(yīng)用。Facebook工程師Jonathan Dan在Facebook官方頁面中撰文,介紹了新版iOS應(yīng)用,F(xiàn)acebook iOS應(yīng)用的發(fā)展歷程以及開發(fā)思路。

  我們今天(編者注:8月23日)發(fā)布了新版iOS應(yīng)用,速度更快、更可靠、更易用。這款新應(yīng)用標(biāo)志著Facebook移動(dòng)產(chǎn)品開發(fā)方式的轉(zhuǎn)型,即深耕不同平臺(tái)。為了便于你們理解這一轉(zhuǎn)型,讓我們回顧移動(dòng)版Facebook的發(fā)展歷程。

  Three20

  早期的iPhone版Facebook誕生于iPhone的起步階段,當(dāng)時(shí)還沒有iPad,而系統(tǒng)也不叫iOS。在早期版本中,我們開發(fā)了名為Three20的開源框架,其中包括當(dāng)時(shí)系統(tǒng)尚未提供的組件庫。

  在隨后幾年中,Three20成為iOS社區(qū)最流行的開源項(xiàng)目之一,幫我們解決了很多問題。然而隨著技術(shù)的發(fā)展,Three20逐漸顯得過時(shí)。其功能越來越復(fù)雜,對(duì)入門者來說上手變難。另一方面,隨著iOS核心的迅速發(fā)展,Three20的一些功能也顯得沒有太大用途。因此,最新版iOS應(yīng)用是我們這么多年來首次沒有使用Three20框架。

  基于HTML5的發(fā)展

  隨著過去幾年移動(dòng)設(shè)備的發(fā)展,我們最需要解決的問題是,無論你用什么設(shè)備、平臺(tái)、運(yùn)營(yíng)商網(wǎng)絡(luò),甚至無論你在哪里,都應(yīng)當(dāng)獲得不錯(cuò)的移動(dòng)體驗(yàn)。為了支持?jǐn)?shù)千款手機(jī)和多個(gè)移動(dòng)平臺(tái),我們利用HTML5技術(shù)去開發(fā)移動(dòng)版Facebook,并向包括iOS在內(nèi)的多個(gè)平臺(tái)發(fā)布。

  利用HTML5,我們只要進(jìn)行一次開發(fā),就可以向多個(gè)平臺(tái)發(fā)布產(chǎn)品。這樣做使我們能覆蓋盡可能多的用戶,也使Facebook移動(dòng)業(yè)務(wù)發(fā)展到了當(dāng)前的規(guī)模。實(shí)際上,我們選擇HTML5不僅是因?yàn)榭梢钥缙脚_(tái)使用一套代碼,也是由于這樣做有利于快速迭代,在不發(fā)布新版本的情況下測(cè)試新功能。

  基于這一網(wǎng)頁技術(shù),我們?yōu)?億Facebook移動(dòng)用戶提供服務(wù),并支持了7000多款設(shè)備。然而我們意識(shí)到,對(duì)iOS這樣的平臺(tái)來說,人們會(huì)希望更快、更可靠的體驗(yàn),而這正是我們iOS應(yīng)用的不足之處。我們已經(jīng)普及了移動(dòng)服務(wù),現(xiàn)在需要深耕服務(wù)。因此,我們從頭開始重寫了Facebook的iOS應(yīng)用,專注于質(zhì)量,并充分利用iOS系統(tǒng)自身這些年來的發(fā)展。

  一切為了速度

  開發(fā)原生iOS應(yīng)用帶來了一個(gè)顯而易見的好處,就是應(yīng)用的速度。在新版iOS應(yīng)用中,動(dòng)態(tài)匯總的滾動(dòng)明顯更流暢,而具體實(shí)現(xiàn)方式則是對(duì)處理任務(wù)的系統(tǒng)資源進(jìn)行更好的調(diào)度。例如在iOS中,主線程驅(qū)動(dòng)用戶界面,處理觸控事件,因此如果在主線程中處理太多任務(wù),那么應(yīng)用就會(huì)變慢。為了解決這一問題,我們盡量在后臺(tái)處理對(duì)計(jì)算資源要求較高的任務(wù),包括所有網(wǎng)絡(luò)活動(dòng)、JSON分析、NSManagedObject對(duì)象創(chuàng)建以及存盤等。

  可以再舉另一個(gè)例子。我們使用Core Text顯示字符串,但排版計(jì)算很快成為一個(gè)瓶頸。在新版iOS應(yīng)用中,當(dāng)我們下載新內(nèi)容時(shí),我們以異步方式計(jì)算字符串大小,緩存在CTFramesetters中,當(dāng)需要在UITableView中顯示時(shí)再利用這些計(jì)算結(jié)果。

  在iOS中啟動(dòng)Facebook應(yīng)用時(shí),你會(huì)想看見動(dòng)態(tài)匯總,而不是正在加載的下拉列表。因此,為了提供最好的體驗(yàn),我們?cè)趹?yīng)用啟動(dòng)時(shí)立即顯示此前緩存的內(nèi)容。不過這帶來了新問題:如果你的動(dòng)態(tài)匯總中內(nèi)容太多,那么UITableView將調(diào)用一個(gè)委托函數(shù)tableView:heightForRowAtIndexPath:,對(duì)每條內(nèi)容進(jìn)行處理,以計(jì)算滾動(dòng)條長(zhǎng)度。這將導(dǎo)致應(yīng)用需要從磁盤中加載所有內(nèi)容,對(duì)整個(gè)內(nèi)容排版進(jìn)行計(jì)算,隨后返回所有內(nèi)容的高度總和。這意味著,當(dāng)動(dòng)態(tài)匯總中內(nèi)容過多時(shí),啟動(dòng)速度會(huì)變得更慢。

  解決這一問題的方法分為兩部分。首先,當(dāng)我們初始化異步排版計(jì)算時(shí),我們?cè)贑ore Data中存儲(chǔ)了內(nèi)容的高度。通過這樣做,我們避免了在tableView:heightForRowAtIndexPath:函數(shù)中計(jì)算排版信息。其次,我們將“內(nèi)容”的模式對(duì)象進(jìn)行分解,在應(yīng)用啟動(dòng)時(shí)只會(huì)從磁盤讀取內(nèi)容的高度信息,隨后才讀取其他信息。而其他的排版計(jì)算均通過異步方式來完成。

  通過以上這些方式,我們?cè)谄聊粷L動(dòng)時(shí)實(shí)現(xiàn)了更高的幀率,并使應(yīng)用保持響應(yīng)。

  新的基礎(chǔ):Messenger及其他

  開發(fā)人員總是避不開一些限制,一些是技術(shù)上的,一些是設(shè)計(jì)上的,一些則是由產(chǎn)品需求引起的。當(dāng)我們重新開發(fā)iOS應(yīng)用時(shí),一款新的原生應(yīng)用Facebook Messenger正越來越流行。為此,我們需要完全集成Messenger的底層架構(gòu)和用戶界面,并充分利用Messenger團(tuán)隊(duì)此前已經(jīng)過充分測(cè)試的代碼。當(dāng)點(diǎn)擊iOS應(yīng)用中“Messages”圖標(biāo)時(shí),運(yùn)行的代碼將與Facebook Messenger應(yīng)用完全一致。

  為了實(shí)現(xiàn)這一目標(biāo),我們按模塊來搭建系統(tǒng)。當(dāng)你在左側(cè)導(dǎo)航菜單中點(diǎn)擊書簽時(shí),模塊提供的視覺效果將得以顯示。動(dòng)態(tài)匯總、Messages、Friends,這些都是模塊。模塊也會(huì)說明相互之間的依賴關(guān)系。例如,我們使用MQTT去更新通知、消息和書簽。在應(yīng)用啟動(dòng)時(shí),應(yīng)用會(huì)遍歷依賴關(guān)系圖,確保在通知功能啟動(dòng)前先啟動(dòng)MQTT服務(wù)。在增加新功能時(shí),模塊系統(tǒng)也將確保應(yīng)用在正確時(shí)間、正確位置啟動(dòng)。

  盡管模塊系統(tǒng)部分解決了問題,但Messenger也不可能簡(jiǎn)單地以新核心取代當(dāng)前代碼。新版iOS應(yīng)用中的認(rèn)證系統(tǒng)以及Messenger應(yīng)用的執(zhí)行方式共享了同一界面的對(duì)象。用Objective-C的語言來說,就是“遵循了同樣的協(xié)議”。通過與Messenger團(tuán)隊(duì)的合作,我們開發(fā)了依賴注入系統(tǒng),向Messenger代碼提供了用于實(shí)時(shí)驗(yàn)證的對(duì)象。當(dāng)作為一款獨(dú)立應(yīng)用時(shí),Messenger代碼以自己的方式處理這些對(duì)象。當(dāng)作為Facebook應(yīng)用的一個(gè)模塊時(shí),將采取不同的處理方式。在代碼中加入這些對(duì)象是一個(gè)聰明的做法。

  針對(duì)未來的計(jì)劃

  目前,動(dòng)態(tài)匯總中的內(nèi)容都有頁面頭,其中包括內(nèi)容預(yù)覽圖、時(shí)間戳、消息、照片、視頻,以及“贊”和“評(píng)論”按鈕。這通過HTML5很容易實(shí)現(xiàn),并且可以快速更新設(shè)計(jì),例如用戶何時(shí)更新了動(dòng)態(tài)匯總,使照片尺寸更大等。不過,動(dòng)態(tài)匯總也在持續(xù)發(fā)展,當(dāng)我們?cè)黾有鹿δ軙r(shí),采用Objective-C的方法將帶來新的挑戰(zhàn)。

  為了解決這一問題,我們采用不同的方式去增加新功能,同時(shí)不必升級(jí)整個(gè)應(yīng)用,這就是“回退渲染器”。當(dāng)動(dòng)態(tài)匯總團(tuán)隊(duì)設(shè)計(jì)了一種新的內(nèi)容形式時(shí),iOS應(yīng)用將下載到一些無法識(shí)別的內(nèi)容。當(dāng)我們檢測(cè)到這種內(nèi)容時(shí),我們將使用回退渲染器,以應(yīng)用可識(shí)別的格式顯示新內(nèi)容中的相關(guān)信息。與此同時(shí),我們開發(fā)了新的定制渲染器,在下一次應(yīng)用升級(jí)時(shí)發(fā)布。對(duì)于應(yīng)用中可能經(jīng)常更新的部分,我們?nèi)詫⒗^續(xù)使用HTML5代碼,這樣我們可以在服務(wù)器端推送升級(jí),而用戶不必下載新版本應(yīng)用。

  你口袋中最好的Facebook體驗(yàn)

  開發(fā)原生iOS應(yīng)用使我們有能力保證應(yīng)用的速度、可靠性和功能。無論使用時(shí)間是30秒,還是乘火車旅行,我們都希望你能有快速而滿意的體驗(yàn)。我們認(rèn)為,移動(dòng)是Facebook最好的平臺(tái),并希望在任何時(shí)間任何地點(diǎn)通過這一平臺(tái)提供最好的Facebook體驗(yàn)。新版iOS應(yīng)用只是我們其中一步。

責(zé)任編輯:佚名 來源: 新浪科技
相關(guān)推薦

2012-05-10 17:18:42

Facebook應(yīng)用中心

2013-07-23 09:02:48

Facebook Ho應(yīng)用設(shè)計(jì)

2013-08-21 12:29:12

Facebook開源

2016-02-24 16:18:22

2021-10-09 10:03:29

開發(fā)Facebook工具

2014-03-27 10:12:19

FacebookTweaksiOS

2012-01-18 13:51:39

2011-02-25 14:32:54

LBS

2014-07-30 14:37:00

FacebookiOS開源庫

2010-08-05 10:55:37

FacebookTwitter

2013-10-30 09:42:38

Facebook圖搜索大數(shù)據(jù)

2015-10-19 09:43:11

facebookinternet.or天網(wǎng)

2009-03-10 19:07:40

Windows MobFaceBook

2021-08-04 15:11:22

區(qū)塊鏈比特幣應(yīng)用

2021-10-10 12:48:48

Facebook服務(wù)中斷服務(wù)離線

2011-05-11 10:02:37

iOS

2023-12-12 06:49:27

iOSiPadOS蘋果官方更新

2012-10-08 10:08:45

移動(dòng)WebFacebookAndroid

2023-09-26 07:33:41

2012-10-16 09:57:55

Facebook數(shù)據(jù)中心開放式數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)