JSPatchとReact Nativeの違い

2409 ワード

前言
去年の3月には、多くのアップルの開発者が熱い更新に対する警告メールを受け取ったかもしれません.メールを受信した可能性の高いコードには、JSPatchのような熱的な修復フレームが使われています.
JSPatchなどの似たようなフレームを使っていない多くの開発者もこの警告メールを受け取ったかもしれません.これはアップルのコード検出メカニズムの誤傷かもしれません.しかしこれはReact Nativeという枠組みを使った開発者の懸念も多く、今後もReact Nativeという枠組みが使えなくなるということですか?
答えはもちろんReact Nativeを続けて使うことができます.ここではなぜ、主に両者の原理と能力から説明します.
JSPatchの原理
JSPatchのコードは非常に洗練されています.コアファイルは二つで、一つはJSPatch.js、もう一つはJSEngine.mです.主な依存性を実現する2つ:
  • Objective C言語の動的属性
  • JavaScripptCoreは、JSを通じてNativeを呼び出す能力
  • JSPatchのコアファイルもそれぞれこの2つに対応しています.JSEngine.mは主に、OBjective C言語の動的能力を使用したオリジナルインターフェースのセットを定義している.JSPatch.jsは、開発者にJSインターフェースのセットを定義したもので、開発者はこのインターフェースに基づいて熱更新コードを書いても良い.JSPatch.jsによって定義されたこのインターフェースは、層DSLに相当する.JSPatchのGitHub上の文書はこのDSL JSPatch-基礎的な使い方を詳しく紹介しています.
    両者を結合することで、JSPatchの能力は非常に強くなり、JSを通じて生APIを任意に呼び出すことができる.
    React Nativeの能力
    React Nativeは非常に大きなプロジェクトです.こちらはまだソースを詳しく読んだことがありません.私は主にReact Nativeがどうやって原生と対話するかについて話します.詳細については公式文書を見ることができます.
    React Nativeには主に二つのコードがあります.公式文書は、JSPatch.jsおよびNative Modulesとして説明される.
  • Native UI Componentsは、元のコード(UIに関係なく)をRNのJSコード
  • に曝す方法を説明する.
  • Native Modulesは、元のUIコンポーネントをRNのJSコード
  • に曝す方法を説明する.
    これらの両方は、元のコードを書く必要があります.同時に再包装して実行します.このようにインターフェースが露出されたら、JSコードで実行できます.つまり、ここは暑い更新がないということです.
    原生と対話して、私達は比較的に関心を持ちます.
  • JSは、元のコードをどうやって呼び出し、リターン値
  • を取得しますか?
  • 元のコードはどのようにJSコードを呼び出し、戻り値
  • を取得しますか?
    前者については、公式文書が詳しく述べられています.主にCallback、Promisesです.
    後者については、公式文書で述べられていることは詳細ではなく、文書内の手段を組み合わせて使用する必要があります.総じて言えば複雑だ.
    RNをまとめると、本質的にはRNは自成一体であり、RNの能力範囲内でのみ熱更新能力を備えている.RNの能力は主に二つの面から来ている.
  • RNのオリジナルコードライブラリは、このコードライブラリに基づいてJSのUIを作成し、ネットワーク要求や地理的位置サービス、プッシュなどの他のいくつかのネイティブサービスを行うことができます.これらの面で熱更新ができます.RNの公式文書もほとんどこの方面に関するものです.
  • 私たちが自分で編纂し、RNに曝露する原生コードは、これに基づいてJSコードを作成することができ、RNの公式文書はこの方面の仕様を詳細に説明しています.私たち自身のRN原生モジュールの範囲内で熱更新が可能です.
    締め括りをつける
    上記の説明を通して、分かりました.
  • JSPatchは強大で、JSを通じて生APIを任意に呼び出すことができます.だからJSPatchの熱更新能力は全面的です.
  • React Nativeも強いですが、その強さは自制です.その提供する熱更新能力は基本的には単に界面を書き,いくつかの通常の業務ロジックを編纂するだけである.
  • 参考資料
  • JSPatchアップル熱更新警告メールに関するissue
  • React Native Apple熱更新警告メールに関するissue
  • アップル警告JSPatch作者回答
  • JSPatch FAQ
  • にアクセスする
  • JSPatch実現原理解説
  • iOS動的更新スキームの比較:JSPatch vs React Native
  • React Native通信システムの詳細解
  • Native Modules