BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

FB正在大规模重构React Native,预计今年发布

| 作者 Sophie Alpert 关注 2 他的粉丝 ,译者 覃云 关注 6 他的粉丝 发布于 2018年6月20日. 估计阅读时间: 5 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

几日前,Facebook刚刚发布了React Native 0.56,随后,React工程经理Sophie Alpert在其官方博客上宣布他们将要重构React Native,使其更轻量,更适应JavaScript生态圈的发展。

React Native的应用现状

Sophie Alpert说,在Facebook内部,他们比以往任何时候都重视React Native,它已经被用于Facebook许多重要的项目上。包括他们最受欢迎的产品之一Marketplace,每月有8亿人使用。

React Native也开始被应用在应用程序的其他地方,如果读者上个月观看了F8主题演讲,就会发现Blood Donations、Crisis Response、Privacy Shortcuts和 Wellness Checks的所有新功能都是使用React Native构建的。

Facebook主应用以外的项目也在使用React Native。新的Oculus Go VR头戴式设备对应的移动应用程序就完全使用React Native构建。

Sophie Alpert表示,React Native的目标从来都不是替代其他技术,他们专注于React Native自身,努力使之变得更好,但他们希望看到其他团队从React Native中得到一些想法或灵感,例如将即时重新加载技术运用到非JavaScript代码中。

架构

React Native项目的设计初衷是成为JavaScript和原生应用之间的桥梁。React DOM将React的状态更新变成了命令式、可变的DOM API调用,如document.createElement(attrs)和.appendChild(),而React Native则返回一个单独的JSON消息,它列出了要执行的一些操作,如[["createView", attrs], ["manageChildren", ...]]。

他们将整个系统设计为永不依赖获取同步响应,并确保列表中所有的内容都可以完全序列化为JSON,并可以反序列化回来。

这样做是为了提高灵活性:在这个架构之上,可以构建像Chrome调试器之类的工具,这些工具可以通过WebSocket连接异步运行所有的JavaScript代码。

在过去的5年里,他们发现最初的设计原则加大了某些特性的开发难度。异步桥接(asynchronous bridge)意味着不能直接将JavaScript逻辑与很多原生API集成在一起,因为这些原生API是同步的。

批量桥接(本地调用队列)意味着React Native应用程序调用本地函数会更加困难。而且串行化的桥接意味着不必要的复制,因为它不是直接在两个世界之间共享内存。对于完全使用React Native构建的应用程序,这些限制通常是可承受的。但对于在React Native与现有应用程序代码之间进行复杂集成的应用程序,就很糟糕了。

因此,Facebook正在对React Native进行大规模重构,让框架变得更加灵活,并更好地与JavaScript /原生混合应用中的原生基础设施集成。

通过这个项目,他们将应用在过去5年中学到的知识,逐步让架构走向现代化。他们正在重构React Native内部,大部分工作都是在底层进行的,现有的React Native应用程序几乎不需要做出更改。

为了使React Native更轻量化并能更好地适应现有的原生应用,此次重构主要从三个方面进行。

首先,改变线程模型。UI更新不再需要在三个不同的线程上执行,可以在任意线程上同步调用JavaScript进行优先更新,同时将低优先级工作推出主线程,以便保持对UI的响应。

其次,将异步渲染功能引入React Native中,允许执行多个渲染并简化异步数据处理。

最后,简化桥接,让它更快、更轻量。原生和JavaScript之间的直接调用效率更高,并且可以更轻松地构建调试工具,如跨语言堆栈跟踪。

完成以上工作之后,就有可能带来更紧密的集成。现在,如果不通过复杂hack的手段就无法让原生导航和手势处理或原生组件(如UICollectionView和RecyclerView)一起工作。在对线程模型做出更改之后,就可以直接构建这样的功能。

Sophie Alpert最后说,他们的目标是希望React Native在JavaScript端能够更加轻量,以更好地适应JavaScript生态系统。等这个项目将要完工时,Facebook会披露更多的细节,敬请期待。

查看英文原文:http://facebook.github.io/react-native/blog/

感谢无明对本文的审校。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT