5天内用户数破亿、增速碾压ChatGPT,Twitter 劲敌Threads是如何构建的?

小扎和马斯克的“格斗”,从八角笼中来到了社交平台上。
当地时间 7 月 5 日,meta 旗下的 instagram 正式发布 threads,与 twitter 展开直接竞争。据介绍,threads 的定位是“用文本分享动态和加入公共对话”。应用上线后,meta 公司首席执行官马克·扎克伯格“实时”公布 threads 最新成绩:4 小时,注册用户 500 万;7 小时,注册用户 1000 万;24 小时,注册用户 3000 万;48 小时,注册用户 7000 万。
北京时间 7 月 10 日 15 点左右,据数据追踪网站 quiver quantitative 披露,threads 的登录用户数已经突破 1 亿人。扎克伯格表示,这主要是自然需求,threads 甚至还没有开展很多推广活动。这远远超出了预期。
而此时,距离 threads 在美洲地区首发上线连 5 天整都没到。threads 的注册用户增速也打破了此前 chatgpt 留下的记录,后者用了 2 个月实现注册用户数破亿。此外,threads 用户的活跃度也很高,据报道,过去几天 threads 上的帖子数量已经达到 9500 多万条,点赞数 1.9 亿次。
投资银行 evercore isi 表示,虽然现在还处于早期阶段,但预计 threads 可以为 meta 带来可观的现金。threads 有望在未来两年内覆盖近 2 亿的日活跃用户,并产生约 80 亿美元的年收入。
那么,这样一款现象级应用程序是如何构建的?
threads 是如何构建的?
近日,国外工具分析平台 emerge tools 率先对 threads app 进行了拆解分析,分别揭晓了 android 版 threads 以及 ios 版 threads 是如何构建的。
emerge tools 表示,meta 投入大量资源对应用做移动性能优化。通过测试和分析,可以看到 meta 的移动应用优化确实做得不错。meta 采取的不少模式虽非典型的最佳实践,但凭借着强大的基础设施和工程能力,meta 仍然在这场“以终为始”的性能大战中占据了主动。
拆解 android、ios 版 threads
android 版 threads 方面,跟其他 meta 应用一样,threads 也提供通用 apk 文件。虽然业界认为 aab 才是最佳实践,但 meta 还是选择了高度优化过的通用 apk——把资源、自定义打包共享库和 redex 结合了起来。
threads 还发布了调试代码。threads 提供 com.instagram.debug.devoptions.sandboxselector 和 com.instagram..debug.quickexperiment 等调试包。
此外,threads 在应用的某些部分使用了 react native,- instagrambundle.js.hbc.spk.xz 可能是 hermes 字节码(js.hbc)的压缩版本。
其中有个很大的.spo 文件,看起来像是不同本机库的编译版本。其中附带一个元数据文件:
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 方面,根据 @richz(threads 工程师)的帖子,threads 主要用 jetpack compose 来构建自己的 ui。跟整个 dex 大小相比,dex 的组装部分相对较小(约 130 kb),所以也许能更高效地使用 compose 并 / 或共享 instagram 代码、控制实际代码量。
threads 的 ios 版有两点比较突出:
thredas 有 0 个动态库,而 facebook 应用却大量使用动态框架。
threads 的插件体量几乎逼近人们的认知极限。其中 barcelonashareextension 达到 81 mb。相比之下,最大的 instagram 插件 - instagramnotificationextension 也仅为 23.5 mb,instagramshareextension 则为 5.6 mb。
后端采用 cinder,基于 python 3.10 构建
此外,据 cpython 核心开发者 łukasz langa 透露,threads 的后端使用了 cinder,这是基于 python 3.10 构建的高性能版本,其中包含 jit、延迟加载模块、预编译静态模块,而且针对 python 3.10 做出了一系列有趣的调整。
据了解,cinder 是 meta 内部打造的、强调高性能的 cpython 3.10 生产版本。其中包含多种性能优化,例如字节码内联缓存、协和即时评估、每次一个方法 jit,以及使用类型注释在 jit 中实现类型专用字节码、从而提高性能的实验性字节码编译器。
cinder 目前已经在支持 instagram,而且正越来越多被用在 meta 公司的各类 python 应用程序当中。meta 表示,公开发布 cinder 是为了推动将部分工作负载回流至 cpython 的讨论,同时努力减少 cpython 开发者在性能优化方面浪费的时间。
但 cinder 本身尚不完善,也不是 cpython 的替代品,meta 发布项目代码的唯一理由,就是想帮助 cpython 在速度方面更上一层楼。虽然 meta 自己确实在生产环境中运行 cinder,但无法为其他开发者提供生产层级的技术支持。只能保证 cinder 在 meta 自己的生产工作负载中稳定且快速,但不保证其在其他外部工作负载或用例中具有良好的稳定性、正确性或性能。
据介绍,instagram 拥有非常庞大的 python 代码库,所以由引用计数复制所带来的开销也极为沉重。为此,cinder 开发出名为“不朽实例”(immortal instance)的解决方案,能够从引用计数中清退对象。此功能通过定义 py_immortal_instances 进行控制,并在 cinder 中默认启用。这对生产流程是一个巨大的胜利(节约开销约 5%),但也会令直接代码的运行速度变慢。由于引用计数操作会频繁发生,所以启用此功能前必须检查对象是否确实参与了引用计数。
threads 的启动时间如何?
emerge tools 用 ettrace 来查看 threads 的实际启动时间。
使用 ettrace 为 threads 的启动过程生成火焰图。
emerge tools 表示,由于 meta 公开的 build 混淆,能从栈中追踪到的信息不多。但仍然可以看到,其中存在大量 pre-main 时间(在追踪期间约为 50 毫秒)。
还有一个会在应用启动时初始化的 wkwebview,它的速度也相当慢。这意味着整个登录体验并非本机、而是在显示 webview,或者是出于追踪的目的而将登录放在了后台。
threads 未来会 “去 instagram 化”吗?
分析发现,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;
资产目录几乎完全相同。
作为一款新产品,threads 的发布显然有些仓促。threads 在 android 和 ios 两大平台上和 instagram 共享大量代码,明显是为了加快开发速度。threads 团队希望快速行动,在一切可能的位置直接使用 instagram 那边的现成代码。在未来的发展中,threads 会不会逐步“去 instagram 化”值得关注。
目前,threads 还缺少了一些关键功能,比如没有翻译按钮、不能搜索内容(只能搜索用户)、没有话题标签功能、没有编辑按钮(发布帖子后无法进行编辑)、不能私信等。meta 产品副总裁 connor hayes 也承认,有一些功能没能赶上这次发布,它们会在日后更新时推出。

河源政府发布意见进一步加快电网建设步伐顺利完成十三五电网建设任务
tcl电视怎么连接wifi_tcl电视怎么投屏
智能传感器在市场中占据着重要一环
LED专用锡膏的存储与使用
SI522可兼容替代13.56MHz读卡NFC芯片QFN32 RC522
5天内用户数破亿、增速碾压ChatGPT,Twitter 劲敌Threads是如何构建的?
长晶推出CJ78系列电压线性稳压器
WEBENCH电气仿真器的特点应用
EMC设计的九个小知识
MQTT 协议:机器对机器通信的解决方案?
基于FMI接口的协同仿真应用
你知道门锁的颜色组合吗?
香港航空正式宣布公司正在研究机队与航线网络整合计划
高通:全球5G部署取得令人惊叹的成绩
[原创] ADI ADM3055ECAN物理层收发器解决方案
在Python中为什么使用lambda
戴尔外星人Area-51m详细评测 到底有多强
华为创新2.0重点研究未来技术 光计算和DNA存储及原子制造
X-47B无人机系统的技术揭秘
运放技术:什么是等效输入噪声?噪声和带宽是什么关系?