bridge_future-5.jpg
作为一个 JavaScript 开发人员,在开发 native react 时候我们可能没有必要关心如何写naitive 代码。但是的确有必要了解 JavaScript 与native 代码是如何建立关系的。
mainImage-full-4226771.jpg
那么许多场景需要我们去接触一些 native 代码,
需要整合第三方 SDK
如果您应用追求高性能
这时候需要自己写一些 native 模块来实现最求性能的目的正在构建是需要一定兼容性的应用
需要调用平台的系统 API
有时候我们不想用现有的模块来实现调用平台系统的 API 时候,也需要开发原生模块。
当然了解一些react native 内部机制无疑是有意开发 react native
下面图是 react native 线程结构图,在 native 这一侧,Main(主线程)为 UI 线程,shadow queue 这个线程负责位置的计算,更重要的是每一模块都有自己线程为 Native Modules。在 JavaScript 这一侧我们有 JavaScript 的线程,native 和 js 是可以进行线程通讯的。
018.JPG
这个 json 对象表示 native 的模块
{ moduleName:'ExampleModule', constants: {}, methods:['chainReact','bridgingIsAwesome'], promiseMethods:[0], syncMethods[1]}
在运行时 JavaScript 是掌握所有 native 模块,这些模块会以全局变量的形式被注入到 VM 的 JavaScript (context)上下文对象。现在可能你可能会感觉到一些困惑,相信随着分享进一步深入,你会了解的更多。记住上面这个 json 对象表示一个 native 的模块,
让我们深入看一下 react native 内部机制,当用户触摸屏幕进行操作,触摸事件从 native 侧发起,通过 bridge 将触摸信息从 native 传递给 JavaScript ,然后 javascript 对信息进行反馈,所有信息都是经过 bridge 进行传递
019.JPG
这些信息包括创建视图,进行网络请求,重新渲染组件等等。这是为什么我们了解 bridge 的重要性。所有经过 bridge 的通讯都是异步的,所以通讯都是通过方法以及方法回调来实现的。另一个值得我们注意的所有信息需要进行序列化后才可以进行传递。而且是批量进行的这样可以提高性能。
020.JPG
其实这种通讯和客户端和服务端进行通讯很像。所有这些消息都是由消息队列来处理的。native 持有消息队列,响应于 javascript。JavaScript 是影响性能的重点,当消息从消息队列来 JavaScript 这一侧,我们应该确保 Javascript 不阻塞,从而不会引起消息队列的拥堵。
traffic-hotspots.jpg
作者:zidea
链接:https://www.jianshu.com/p/2315c14bf301