脸书iOS应用程序的十年历程

作者 | Sergio De Simone 译者 | 刘雅梦 策划 | 丁晓昀  

脸书(Facebook)在 2012 年重写了其 iOS 应用程序,以利用原生性能,并提供了比以前基于 HTML5 跨平台实现更高的可靠性和可用性。脸书工程师 Dustin Shahidehpour 解释说,在重写后的十年里,应用程序代码库一直在不断发展,以适应新功能的引入,规避 SDK 限制,并跟上 iOS 平台的变化。

在原生重写的两年后,脸书的 iOS 应用程序开始出现与核心数据使用相关的可靠性问题。Shahidehpour 表示,核心数据模型本质上是可变的,这使得在多线程应用程序中使用它们变得很困难。

最终,这种设计加剧了不确定性代码的产生,这些代码很难调试或重现缺陷。很明显,这种架构是不可持续的,是时候重新思考它了。

脸书工程师随后实现了 ComponentKit,这是一个受 React 启发的声明性框架,用于定义 UI。ComponentKit 使用了不可变数据,这简化了代码的推理,并提供了比以前实现高 50% 的性能。ComponentKit 在脸书上取得了巨大的成功,它仍然是创建 iOS UI 的默认选择。

2015 年,脸书应用程序出现了 Shahidehpour 所描述的“特性爆炸”,其净效果是缩短了应用的发布时间,甚至可能导致应用程序被 iOS 杀死。这导致了使用动态库(dylib)对代码库进行模块化的努力,这样部分代码可以延迟加载,从而减少了在 main 之前执行的任务数量。

虽然动态库的采用解决了启动时间问题,但它引入了另一类可靠性问题,主要与尝试访问尚未加载的动态库中的某些代码时可能会出现运行时错误有关。为了解决这个问题,脸书工程师决定利用他们自己的构建系统 Buck 来生成的构建图。

每个“目标”都列出了构建它所需的所有信息(依赖项、编译器标志、源代码等),当调用“buck build”时,它会将所有这些信息构建成一个可以查询的图。

使用这些信息,该应用程序能够创建一个从类和函数到动态库的映射,然后自动生成代码,以确保在某些函数试图访问动态库时将其加载到内存中。

这进一步导致了一个插件系统的创建,它可以在构建时而不是在运行时检测依赖关系图相关的错误。

直到 2020 年,由于越来越多的 Swift 专用 API 出现在 iOS SDK 中,脸书才开始在他们的移动应用中使用 Swift。这与以前只通过某种包装器访问 SDK 功能的立场截然不同。虽然是出于提高开发人员效率的目标,但由于 Swift 和 C++ 之间缺乏互操作性,这种方法变得更加复杂了。解决方案是要求与 UI 相关的代码不包含任何 C++,这样工程师就可以使用苹果当前和未来的 Swift API,而为基础设施代码保留 C++。

总体而言,脸书 iOS 应用程序的发展表明,有许多策略可以帮助克服平台限制,并适应需求和基础平台不断变化的本质。如果你对完整的细节感兴趣,请不要错过原文。

原文链接:

https://www.infoq.com/news/2023/02/Facebook-app-ten-years/

声明:本文为 InfoQ 翻译,未经许可,禁止转载

今日好文推荐

科大讯飞回应用“绩效回溯”变相降薪;OpenAI逆天开放API,价格打骨折;推特裁员超70%,马斯克给剩下员工“画饼”?|Q资讯

直接到云上做开发?先等等,这个方案还“半生不熟”

“干净”的代码,贼差的性能

一场向应用交付标准的“冲锋”

相关推荐

  • vivo AI 计算平台的 K8s 分级配额管理实践
  • 向云原生要数据:日均万亿级数据安全保障和小时级风险应对实践
  • 平台工程不适合中国企业?这个观点值得反驳!
  • GPT全家桶再添一员!看论文神器,ResearchGPT,可立即试用
  • 独家揭秘:ChatGPT背后的35岁神秘教母,一手推火这个神级AI
  • 大脑视觉信号被Stable Diffusion复现图像!“人类的谋略和谎言不存在了” | CVPR2023
  • 知源笔记公众号集成 ChatGPT 能力
  • 文科就业签约率低至12%;日本突然声称多出7000余小岛;特斯拉疑失控连撞多车冲毁店门;中国新能源车产销世界第一...|酷玩日爆
  • 狗都看不下去了 | 每日一冷
  • 2023年人大国关学院在职课程班各专业春季招生简章
  • 特斯拉未来要狂暴降价,而且还想靠降价改变世界?
  • 中国军工为何一定要做美国不愿做、做不到的事?
  • 看看人家做的物业管理系统,功能多全面!!
  • 他做了一个茶台,竟能“咕噜噜”喝5公斤的水,绝了
  • 俄称扎波罗热核电站人员遭袭;斐济因日本核污染水排海计划处于高度戒备;价值1.5亿欧元毒品被冲上法国北部海岸 | 每日大新闻
  • Ubuntu计划发布新的Mini ISO,小于140MB
  • 办事不力、沟通无果,cURL作者公开指责微软
  • ChatGPT爆火后,NLP技术不存在了
  • 重磅!支付宝上线新功能
  • 48岁李玟病情恶化,自曝现状:“我已无法正常生活”