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

Facebook開發(fā)手記:新iOS應(yī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)用標志著Facebook移動產(chǎn)品開發(fā)方式的轉(zhuǎn)型,即深耕不同平臺。為了便于你們理解這一轉(zhuǎn)型,讓我們回顧移動版Facebook的發(fā)展歷程。

  Three20

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

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

  基于HTML5的發(fā)展

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

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

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

  一切為了速度

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

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

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

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

  通過以上這些方式,我們在屏幕滾動時實現(xiàn)了更高的幀率,并使應(yīng)用保持響應(yīng)。

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

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

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

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

  針對未來的計劃

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

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

  你口袋中最好的Facebook體驗

  開發(fā)原生iOS應(yīng)用使我們有能力保證應(yīng)用的速度、可靠性和功能。無論使用時間是30秒,還是乘火車旅行,我們都希望你能有快速而滿意的體驗。我們認為,移動是Facebook最好的平臺,并希望在任何時間任何地點通過這一平臺提供最好的Facebook體驗。新版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è)計

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

2010-08-05 10:55:37

FacebookTwitter

2015-10-19 09:43:11

facebookinternet.or天網(wǎng)

2013-10-30 09:42:38

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

2014-07-30 14:37:00

FacebookiOS開源庫

2009-03-10 19:07:40

Windows MobFaceBook

2021-10-10 12:48:48

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

2021-08-04 15:11:22

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

2023-09-26 07:33:41

2012-10-08 10:08:45

移動WebFacebookAndroid

2012-10-16 09:57:55

Facebook數(shù)據(jù)中心開放式數(shù)據(jù)

2011-05-11 10:02:37

iOS

2023-12-12 06:49:27

iOSiPadOS蘋果官方更新
點贊
收藏

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

主站蜘蛛池模板: 久久久国产精品一区 | 欧美专区日韩 | 国产精品久久免费观看 | 亚洲精品视频在线看 | 欧美亚洲视频在线观看 | 成人在线视频一区 | 色综合色综合色综合 | 久久精品黄色 | 成人在线免费视频观看 | 99国产精品视频免费观看一公开 | 亚洲91精品| 国产目拍亚洲精品99久久精品 | 日韩三级免费观看 | 日韩精品一区二区三区在线观看 | 亚洲精品在线免费观看视频 | 精品国产一区二区三区四区在线 | 91久久国产综合久久 | 欧美日韩精品在线一区 | 做a视频 | 国产精品国产成人国产三级 | 在线欧美小视频 | 91最新入口 | 蜜臀久久99精品久久久久久宅男 | 久久久国产精品 | 亚洲一区国产 | 日韩欧美三级电影 | 国产免费福利在线 | 欧美区日韩区 | av一级毛片| 久久精品久久精品久久精品 | 国产成人精品一区二 | 国产美女在线观看 | 四虎影音 | 在线播放中文字幕 | 中文字幕 在线观看 | 免费观看一级特黄欧美大片 | 国产一区中文字幕 | 人人草人人干 | 精品国产1区2区3区 在线国产视频 | 国产欧美视频一区 | 青青久草|