小扎和馬斯克的“格斗”,從八角籠中來到了社交平臺上。
當(dāng)?shù)貢r間 7 月 5 日,Meta 旗下的 Instagram 正式發(fā)布 Threads,與 Twitter 展開直接競爭。據(jù)介紹,Threads 的定位是“用文本分享動態(tài)和加入公共對話”。應(yīng)用上線后,Meta 公司首席執(zhí)行官馬克·扎克伯格“實時”公布 Threads 最新成績:4 小時,注冊用戶 500 萬;7 小時,注冊用戶 1000 萬;24 小時,注冊用戶 3000 萬;48 小時,注冊用戶 7000 萬。
北京時間 7 月 10 日 15 點左右,據(jù)數(shù)據(jù)追蹤網(wǎng)站 Quiver Quantitative 披露,Threads 的登錄用戶數(shù)已經(jīng)突破 1 億人。扎克伯格表示,這主要是自然需求,Threads 甚至還沒有開展很多推廣活動。這遠遠超出了預(yù)期。
而此時,距離 Threads 在美洲地區(qū)首發(fā)上線連 5 天整都沒到。Threads 的注冊用戶增速也打破了此前 ChatGPT 留下的記錄,后者用了 2 個月實現(xiàn)注冊用戶數(shù)破億。此外,Threads 用戶的活躍度也很高,據(jù)報道,過去幾天 Threads 上的帖子數(shù)量已經(jīng)達到 9500 多萬條,點贊數(shù) 1.9 億次。
投資銀行 Evercore ISI 表示,雖然現(xiàn)在還處于早期階段,但預(yù)計 Threads 可以為 Meta 帶來可觀的現(xiàn)金。Threads 有望在未來兩年內(nèi)覆蓋近 2 億的日活躍用戶,并產(chǎn)生約 80 億美元的年收入。
那么,這樣一款現(xiàn)象級應(yīng)用程序是如何構(gòu)建的?
Threads 是如何構(gòu)建的?
近日,國外工具分析平臺 Emerge Tools 率先對 Threads App 進行了拆解分析,分別揭曉了 Android 版 Threads 以及 iOS 版 Threads 是如何構(gòu)建的。
Emerge Tools 表示,Meta 投入大量資源對應(yīng)用做移動性能優(yōu)化。通過測試和分析,可以看到 Meta 的移動應(yīng)用優(yōu)化確實做得不錯。Meta 采取的不少模式雖非典型的最佳實踐,但憑借著強大的基礎(chǔ)設(shè)施和工程能力,Meta 仍然在這場“以終為始”的性能大戰(zhàn)中占據(jù)了主動。
拆解 Android、iOS 版 Threads
Android 版 Threads 方面,跟其他 Meta 應(yīng)用一樣,Threads 也提供通用 APK 文件。雖然業(yè)界認為 AAB 才是最佳實踐,但 Meta 還是選擇了高度優(yōu)化過的通用 APK——把資源、自定義打包共享庫和 Redex 結(jié)合了起來。
Threads 還發(fā)布了調(diào)試代碼。Threads 提供 com.instagram.debug.devoptions.sandboxselector 和 com.instagram..debug.quickexperiment 等調(diào)試包。
此外,Threads 在應(yīng)用的某些部分使用了 React Native,- InstagramBundle.js.hbc.spk.xz 可能是 Hermes 字節(jié)碼(js.hbc)的壓縮版本。
其中有個很大的.spo 文件,看起來像是不同本機庫的編譯版本。其中附帶一個元數(shù)據(jù)文件:
arm64-v8a/librtc.so 11336240 bda527a307edd868700fccfab15481f403d3f39363289d5d6a717579f284bed7 arm64-v8a/libgojni.so 11330024 616915938eb1face6aa3392aedab8bddce280f2b84423377ac65896a6b3faad7 arm64-v8a/libarfxgraphicsmerged.so 9710600 afb00aa881a63b20371e447dbbad61fefcf4df2c23c922a9e44e2171d7a649ad ...
Emerge Tools 猜測這個.spo 文件是所有本機庫的合并版本,第二個條目是 offset/size,第三個條目則是 checksum。
UI 方面,根據(jù) @richz(Threads 工程師)的帖子,Threads 主要用 Jetpack Compose 來構(gòu)建自己的 UI。跟整個 dex 大小相比,dex 的組裝部分相對較小(約 130 KB),所以也許能更高效地使用 Compose 并 / 或共享 Instagram 代碼、控制實際代碼量。
Threads 的 iOS 版有兩點比較突出:
Thredas 有 0 個動態(tài)庫,而 Facebook 應(yīng)用卻大量使用動態(tài)框架。
Threads 的插件體量幾乎逼近人們的認知極限。其中 BarcelonaShareExtension 達到 81 MB。相比之下,最大的 Instagram 插件 - InstagramNotificationExtension 也僅為 23.5 MB,InstagramShareExtension 則為 5.6 MB。
后端采用 Cinder,基于 Python 3.10 構(gòu)建
此外,據(jù) CPython 核心開發(fā)者 ?ukasz Langa 透露,Threads 的后端使用了 Cinder,這是基于 Python 3.10 構(gòu)建的高性能版本,其中包含 JIT、延遲加載模塊、預(yù)編譯靜態(tài)模塊,而且針對 Python 3.10 做出了一系列有趣的調(diào)整。
據(jù)了解,Cinder 是 Meta 內(nèi)部打造的、強調(diào)高性能的 CPython 3.10 生產(chǎn)版本。其中包含多種性能優(yōu)化,例如字節(jié)碼內(nèi)聯(lián)緩存、協(xié)和即時評估、每次一個方法 JIT,以及使用類型注釋在 JIT 中實現(xiàn)類型專用字節(jié)碼、從而提高性能的實驗性字節(jié)碼編譯器。
Cinder 目前已經(jīng)在支持 Instagram,而且正越來越多被用在 Meta 公司的各類 Python 應(yīng)用程序當(dāng)中。Meta 表示,公開發(fā)布 Cinder 是為了推動將部分工作負載回流至 CPython 的討論,同時努力減少 CPython 開發(fā)者在性能優(yōu)化方面浪費的時間。
但 Cinder 本身尚不完善,也不是 CPython 的替代品,Meta 發(fā)布項目代碼的唯一理由,就是想幫助 CPython 在速度方面更上一層樓。雖然 Meta 自己確實在生產(chǎn)環(huán)境中運行 Cinder,但無法為其他開發(fā)者提供生產(chǎn)層級的技術(shù)支持。只能保證 Cinder 在 Meta 自己的生產(chǎn)工作負載中穩(wěn)定且快速,但不保證其在其他外部工作負載或用例中具有良好的穩(wěn)定性、正確性或性能。
據(jù)介紹,Instagram 擁有非常龐大的 Python 代碼庫,所以由引用計數(shù)復(fù)制所帶來的開銷也極為沉重。為此,Cinder 開發(fā)出名為“不朽實例”(Immortal Instance)的解決方案,能夠從引用計數(shù)中清退對象。此功能通過定義 Py_IMMORTAL_INSTANCES 進行控制,并在 Cinder 中默認啟用。這對生產(chǎn)流程是一個巨大的勝利(節(jié)約開銷約 5%),但也會令直接代碼的運行速度變慢。由于引用計數(shù)操作會頻繁發(fā)生,所以啟用此功能前必須檢查對象是否確實參與了引用計數(shù)。
Threads 的啟動時間如何?
Emerge Tools 用 ETTrace 來查看 Threads 的實際啟動時間。
使用 ETTrace 為 Threads 的啟動過程生成火焰圖。
Emerge Tools 表示,由于 Meta 公開的 build 混淆,能從棧中追蹤到的信息不多。但仍然可以看到,其中存在大量 pre-main 時間(在追蹤期間約為 50 毫秒)。
還有一個會在應(yīng)用啟動時初始化的 WKWebView,它的速度也相當(dāng)慢。這意味著整個登錄體驗并非本機、而是在顯示 webview,或者是出于追蹤的目的而將登錄放在了后臺。
Threads 未來會 “去 Instagram 化”嗎?
分析發(fā)現(xiàn),Threads 在 Android 和 iOS 兩大平臺上都照搬了不少 Instagram 代碼,比如 InstagramBundle.js.hbc.spk.xz 等等。
其中,Android 版 Threads 與 Instagram 間的 /assets/dsp 也是相同的??紤]到 Threads 與 Instagram 高度集成,二者共享代碼也完全在情理之中。
此外,iOS 版 Threads 的 BarcelonaShareExtension 與 Instagram 的 FBSharedFramework 之間擁有很多相同元素。一些值得注意的相同元素:
FilterAsset.bundle;
ig_signals_cupid_better_recall_v1.mlmodelc 與ig_signals_cupid_v2.mlmodelc;
資產(chǎn)目錄幾乎完全相同。
作為一款新產(chǎn)品,Threads 的發(fā)布顯然有些倉促。Threads 在 Android 和 iOS 兩大平臺上和 Instagram 共享大量代碼,明顯是為了加快開發(fā)速度。Threads 團隊希望快速行動,在一切可能的位置直接使用 Instagram 那邊的現(xiàn)成代碼。在未來的發(fā)展中,Threads 會不會逐步“去 Instagram 化”值得關(guān)注。
目前,Threads 還缺少了一些關(guān)鍵功能,比如沒有翻譯按鈕、不能搜索內(nèi)容(只能搜索用戶)、沒有話題標(biāo)簽功能、沒有編輯按鈕(發(fā)布帖子后無法進行編輯)、不能私信等。Meta 產(chǎn)品副總裁 Connor Hayes 也承認,有一些功能沒能趕上這次發(fā)布,它們會在日后更新時推出。
-
Twitter
+關(guān)注
關(guān)注
0文章
176瀏覽量
15941 -
python
+關(guān)注
關(guān)注
56文章
4811瀏覽量
85076 -
ChatGPT
+關(guān)注
關(guān)注
29文章
1570瀏覽量
8117
原文標(biāo)題:5 天內(nèi)用戶數(shù)破億、增速碾壓 ChatGPT,Twitter 勁敵 Threads 是如何構(gòu)建的?
文章出處:【微信號:AI前線,微信公眾號:AI前線】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論