Slide 1

Slide 1 text

Re-Architecture of ReactNative Sota Ohara Nihonbashi.js #7 2023/09/06

Slide 2

Slide 2 text

Profile Sota Ohara @sottar_ CureApp, inc. EM / SWE RENDEZ-VOUS inc. CTO @sottar

Slide 3

Slide 3 text

OR

Slide 4

Slide 4 text

Performance

Slide 5

Slide 5 text

Performance ● ReactNative は Bridge を通して Platform にアクセスする ● 独自で Widget を持っていないので Bridge を通して Platform の Widget を取得する必要がある

Slide 6

Slide 6 text

NativeBridge JavaScript (JavaScriptCore) Native Android - Java iOS - Obj C / Swift RN Bridge (C++) ● 引数, 返り値などは JSON を使ってやりとり ● 実行時には非同期に処理される ● アプリ起動時に Module が登録される JSON JSON

Slide 7

Slide 7 text

JSI (JavaScript Interface)

Slide 8

Slide 8 text

JSI JavaScript が C++ のオブジェクトへのリファレンスを持つことで、直接 C++ の コードを実行できる仕組み • JSON を serialize/deserialize する必要がなくなる • Native のコードを同期的に呼び出すことができる • 起動時に Module を登録する必要がなくなる ReactNative 内部で使用する JavaScript の engine を選べるようになった

Slide 9

Slide 9 text

Turbo Modules Fabric Native Components

Slide 10

Slide 10 text

Turbo Modules JSI の仕組みを使った新しい Native Module システム Location や Bluetooth など Native の機能を同期的に実行することができる JS Thread JSI Native Android - Java iOS - Obj C / Swift

Slide 11

Slide 11 text

Fabric Native Components • Fabric Renderer を使用して画面上に Native Component をレンダリング するもの • JSI を使用することで View の更新を同期的に行う仕組み • React Concurrent Mode を前提に書かれていて、ユーザーのインタラクショ ンに優先順位をつけて最適な描画を行えるようになる

Slide 12

Slide 12 text

Performance Benchmarks https://github.com/reactwg/react-native-new-architecture/discussions/123

Slide 13

Slide 13 text

Thank you.