为什么 Instagram 再次转向 React Native——以及这次它是如何最终成功的

2023 年,Meta 悄然重新点燃了对 React Native 的承诺。这一次,带来了真正的生产成果。

背景故事:Instagram 第一次试水 React Native

Instagram 跟 React Native 嘛,关系一直都挺长的,但也有点磕磕绊绊的。

话说回到 2016 年那会儿,Instagram 就想把 React Native 弄到它的推送通知和评论管理界面里去。当时看着挺有戏的,但后来发现性能跟不上,各种手机系统特有的奇葩问题也多,工具也不太给力,所以就只好先撤了一部分。React Native 就一直待在边上,从来没真正在核心功能里挑大梁。

再后来,就直接重写了。

2023 年之后,有啥不一样了?

React Native 本身就变了。

2023 年,Meta 把大家等了很久的 React Native Fabric 给推出来了。这玩意儿可是彻底重构过的,用了更现代的渲染管线,能完全异步布局,跟 C++ 也能更好地配合了。

再加上 CodegenTurboModulesHermes 这些新东西,React Native 的性能、启动速度和跟原生代码桥接的延迟,就不再是纸上谈兵了。这些都是能实实在在测出来的提升。

核心升级:

  • Fabric: 声明式 UI,还支持并发渲染。
  • TurboModules: 原生模块能按需加载了,这样应用启动就更快了。
  • Hermes: Meta 自家的 JS 引擎,专门为 RN 优化过的。
  • Codegen: 生成的原生绑定代码,类型更安全了。

为啥要用 React Native 重写 Instagram 的核心功能?

Instagram 的应用架构啊,那时候已经有点老旧了。团队就得琢磨:

  • 是继续在 iOS 和 Android 上重复造轮子?
  • 还是干脆集中精力,搞一个性能好的跨平台技术栈?

2023 年的 React Native,给了他们一个实实在在的第二次机会。

重写前 vs 重写后

之前(平台专属代码):

typescript 复制代码
// iOS Feed 渲染
func renderPost(post: Post) {
    let view = UIImageView()
    view.image = post.image
    feedContainer.addSubview(view)
}

// Android Feed 渲染
fun renderPost(post: Post) {
    val view = ImageView(context)
    view.setImageBitmap(post.image)
    feedContainer.addView(view)
}

之后(使用 Fabric 的 React Native):

typescript 复制代码
// 跨平台 React Native 组件
export const PostView = ({ image }: { image: string }) => (
<Image source={{ uri: image }} style={styles.image} />
);

结果: 跨平台代码共享率达到约 45%,迭代速度也提升了。

简化后的重写架构

lua 复制代码
+---------------------------+
|        JavaScript         |
|  (React Components + UI)  |
+------------+--------------+
             |
             v
+------------+--------------+
|       React Native        |
|  Fabric + TurboModules    |
+------------+--------------+
             |
     +-------+--------+
     |                |
     v                v
+--------+      +------------+
| Android|      |   iOS      |
|  Views |      |   Views    |
+--------+      +------------+

迁移决策树

sql 复制代码
            +--------------------------+
            | Need to ship new feature?|
            +-----------+--------------+
                        |
            +-----------v-------------+
            | Can be done in RN?      |
            +-----------+-------------+
                        |
         +--------------v-------------+
         | Rewrite in React Native    |
         | with Fabric + Codegen      |
         +----------------------------+

如果性能至关重要(例如,相机、增强现实),则回退到原生。否则,默认使用 RN。

面临的挑战

  • 与遗留原生代码的互操作性
  • 保持原生用户体验的一致性
  • 开发者适应新的 RN 技术栈

"我们必须重新思考团队如何协作。RN 不仅仅是技术上的转变;它更是工作流程上的转变。"------Meta 工程师

Instagram 内部报告

结论:这次成功了

Instagram 第二次押宝 React Native,不再是为了炒作。而是因为它成熟了。

有了 Fabric、TurboModules 和 Codegen,RN 不再是"写一次,到处调试"。它是一个严肃的跨平台系统,经过 Meta 自家应用的磨砺而变得强大。 而 Instagram 的重写证明了这一点:你可以在现代 React Native 上交付复杂、高流量、高精度的体验。

最后,欢迎关注我的公众号:OpenFlutter

相关推荐
崔庆才丨静觅3 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60613 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了4 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅4 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅4 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅4 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment4 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅5 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊5 小时前
jwt介绍
前端
爱敲代码的小鱼5 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax