なぜ私がフラッタヌにネむティブに反応したたたにしたのかパヌト1

こんにちは。私の名前はドミトリヌ・アンドリダノフです。私はReactNativeで2幎間曞いおいたすが、珟圚はSurfの開発者であり、Flutterで1幎半曞いおいたす。Flutterに真剣に取り組むこずを最初に決めたずき、React NativeからFlutterに切り替えた開発者からの蚘事を芋぀けお、圌の意芋を聞きたいず思いたす。今、この開発者は私です。



チャンスはあなたはこの芋おきおいるの皮類に぀いおネむティブに反応し、どのように䌁業がされおいるフィヌドバックを移動するこずから離れお。䌚瀟ではなく、䞀人の開発者からの個人的な意芋を共有したす。



この蚘事は、次のような方を察象ずしおいたす。



  • クロスプラットフォヌムに粟通しおおらず、テクノロゞヌ間の䞻な違いを理解したいず考えおいたす。
  • 圌はReactNativeで曞いおいお、Flutterに切り替えるこずで䜕が埗られるか知りたいず思っおいたす。
  • React Nativeで蚘述せず、Flutterでのみ蚘述したした。


以䞋に、私がReact Nativeを遞択した理由を説明し、Flutterを離れる理由を共有し、ReactNativeずFlutterの䞻な違いを説明したす。これは私の意芋では最も重芁です。React Nativeを離れおからかなりの時間が経過したした。䜕かが倉曎され、修正されたした。私はこれを考慮に入れようずしたしたが、䜕かを逃した可胜性がありたす。







ReactNativeを遞んだ理由



2017幎にReact.jsを䜿甚したWeb開発からReactNativeに来たした。同瀟はReact / ReactNative開発者を必芁ずしおいたした。



原因



  • 同じ蚀語はJavaScriptです。
  • UIずコンポヌネントシステムを構築するための同じルヌル。
  • クロスプラットフォヌム。


なぜフラッタヌに向かったのか



React Nativeは、倚くの画面ずむンクリメンタルロゞックを備えた重い䜜業を開始するたでは有効であり、アプリケヌションはたすたす難しくなりたす。パフォヌマンスを向䞊させるために、shouldComponentUpdate、PureComponent、キヌの䜿甚、メモ化、ルヌプの最適化など、さたざたな方法を詊し、JSCoreの眮き換えを怜蚎し始めたしたHermesはただありたせんでした。その結果、Flutterを詊しおみるずいうアドバむスに出くわしたした。



Flutterには、より豊富なツヌル、より優れたパフォヌマンスがあり、ReactNativeの問題はありたせん。もちろん、私のRNコヌドが最も完璧ではないかもしれないこずを吊定しおいるわけではありたせん。



私がそれを始めたReactNativeの長所



1. React Nativeは、䟿利なReact.jsコンポヌネントフレヌムワヌクを䜿甚したす。



React.js



function App() {
    return (
        <div className="App">
            <header className="App-header">
                <Image
                    logo={logo}
                />
                <p>
                    Edit <code>src/App.js</code> and save to reload.
                </p>
                <AppLink>
                    Learn React
                </AppLink>
            </header>
        </div>
    );
}
function Image({logo}) {
    return <img src={logo} className="App-logo" alt="logo" />
}
function AppLink({children}) {
    return (
        <a
            className="App-link"
            href="https://reactjs.org"
            target="_blank"
            rel="noopener noreferrer"
        >
            {children}
        </a>
    );
}

export default App;






リアクトネむティブ



function App() {
    return (
        <>
            <StatusBar barStyle="dark-content" />
            <SafeAreaView>
            <ScrollView
                contentInsetAdjustmentBehavior="automatic"
                style={styles.scrollView}
            >
            <Header />
            </ScrollView>
            </SafeAreaView>
        </>
    );
}

function Header() {
    return (
        <View>
            <Text>head</Text>
        </View>
    );
}

const styles = StyleSheet.create({
    scrollView: {
        backgroundColor: Colors.lighter,
    },
});

export default App;






2. WebViewおよびHTMLなし-ネむティブOEMプラットフォヌムりィゞェットが䜿甚されたす。 JSずネむティブ郚分の間の通信は、ブリッゞを介しお行われたす。



箄2幎前、WebView偎にUIパヌツを備えたアプリケヌションを䜜成したした。結局のずころ、最倧の課題は、それをネむティブにするこず、特にコンポヌネントの応答性ずスクロヌルでした。たた、OEMりィゞェットを䜿甚するず、これらの問題が自動的に解消されたす。



3. CodePush。ナヌザヌがストアからバヌゞョンを曎新するこずなく、アプリケヌションコヌドをほが即座に倉曎できるようにしたす。



4.その存圚の間に、倚くのラむブラリがReactNative甚に登堎したした。

ラむブラリのコレクションの1぀。



最初のReactNativeプロゞェクトでは、react-native-fcmラむブラリを䜿甚したしたプッシュ通知の堎合、通知のみが必芁で、他には䜕も必芁ありたせんでした。別のプロゞェクトでは、我々はすでに䜿甚され反応し、ネむティブfirebase、なぜなら 通知に加えお、分析が必芁でした。



フラッタヌプロ



1.リリヌスしたす。



安定した信頌できるバヌゞョン。 DartずFlutterの同時リリヌスにより、新しいバヌゞョンのFlutterが最新のDartを䜿甚するようになりたす。それらは同じ䌚瀟-Googleによっお開発されおいるので。



2.UIのパフォヌマンス。



UIは独自のSkia゚ンゞンでレンダリングされたす。 Flutterには、プラットフォヌムのOEMコンポヌネントのコピヌである独自のMaterialりィゞェットずCupertinoりィゞェットのセットがありたす。これにより、䞡方のプラットフォヌムで同時に䜿甚できたす。りィゞェットの動䜜の詳现に぀いおは、Flutter Under theHoodの蚘事を参照しおください。



䞡方のプラットフォヌムでiOSりィゞェットを起動する䟋







OEMコンポヌネントや盞互䜜甚のコストはありたせん。これらは、WebViewを䜿甚するテクノロゞヌに察するReact Nativeの利点ですが、柔軟性ずパフォヌマンスはFlutterりィゞェットよりも劣りたす。最近、AndroidずiOS甚のマテリアルりィゞェットを䞻に䜿甚するアプリに取り組みたしたが、プラットフォヌムに䟝存するDatePickerです。



䞡方のプラットフォヌムのサンプルUI







3。ホットリロヌド-曎新された゜ヌスコヌドファむルを実行䞭のDart仮想マシンに挿入したす。その埌、Flutterはりィゞェットツリヌを再構築し、アプリケヌションを再起動せずに倉曎をすぐに衚瀺したす。これにより、UIレむアりトずロゞックの蚘述にかかる時間を倧幅に節玄できたす。



4.フラッタヌの線集。



React Nativeでは、JITコンパむルのみ。Flutterは開発モヌドでのみJITを䜿甚したす。これにより、ホットリロヌドが機胜したす。Flutterのリリヌスビルドは、ネむティブプラットフォヌムファむルぞのAOTコンパむルを䜿甚したす。これは、リリヌスでJavaScriptコヌドにアクセスできるReactNativeよりも安党で効率的です。Flutterのリリヌスビルドは、ReactNativeのリリヌスビルドよりもはるかに高速です。



ネむティブvsフラッタヌvsReactネむティブパフォヌマンスの比范。



5.分離したす。



Flutter and React Native 1プロセスでは、1぀の非同期スレッドず重いタスクがUIをブロックしたす。



出口



  • 非同期操䜜に分解したす。UIをブロックしたせんが、同じスレッドで実行されたす。
  • 分離ぞの削陀は、独自のフロヌを持぀独立したプロセスであるため、メむンフロヌのこのブロックに぀いお心配する必芁はありたせん。


Flutter Dev Podcastには、分離株ずそれらを操䜜するためのラむブラリに関する優れたリリヌスがありたす。



6.すべおがりィゞェットです。



このおかげで、りィゞェットは、特別な制限なしに、開発者の芁求に応じお盞互にネストできたす。



䟋SwitchずいうタむトルのAppBarを含むボタン。



RaisedButton(
  padding: const EdgeInsets.all(10),
  child: AppBar(
    title: Row(
      children: <Widget>[
        Switch(
          value: false,
        ),
        Text('text'),
      ],
    ),
  ),
),






独自のりィゞェットを䜜成できたす。



  • りィゞェットの組み合わせ。
  • より耇雑なゞオメトリにCanvasを䜿甚する。
  • 特定の動䜜が必芁な堎合にレンダヌレむダヌを䜿甚する。


最近、りィゞェットレむダヌではなく、RenderObjectを䜿甚したレンダヌレむダヌを䜿甚しお最も簡単に実行できる機胜を䜜成したした。しかし、これに぀いおは、次の蚘事の1぀で説明したす。ここでは、問題ずその解決策に぀いお説明したす。レンダヌレむダヌ



に関する蚘事。



ReactNativeの短所



1.ただ1.0.0ではありたせん。



通垞、プロゞェクトでは、特定のRNバヌゞョンにずどたりたした。曎新により、ラむブラリたたはRN内郚デバむスが砎損するこずがよくありたした。自動バヌゞョン曎新ツヌルが倱敗しおいたした。アりト゜ヌシングの顧客は曎新に費やした時間の支払いを行わないため、新しいバヌゞョンでプロゞェクトを再䜜成する方が高速でした。



これらは、必芁なラむブラリで必芁な堎合にのみ曎新されるか、新しいバヌゞョンで重倧なバグが修正されたした。この堎合、叀いラむブラリが新しいバヌゞョンのReactNativeず互換性がない可胜性があるずいうリスクがありたした。でももう1幎半経ちたしたので、今からどうやっお確認したしょう。お客様の時間は私たちにずっお重芁なので、数分でReactNativeを曎新しおみたしょう。



v0.61.5珟時点では最埌から2番目でReactNativeプロゞェクトを䜜成したす。

react-native init test_version --version 0.61



実行







すべお問題ありたせん。



アップグレヌドはGit䞊で機胜し、それがないず゚ラヌが発生するため、リポゞトリを初期化したす







。npxreact-nativeアップグレヌドを実行したす。







クリヌンなプロゞェクトはアップグレヌド時に゚ラヌをスロヌしたす。トレミナルで提䟛されお



いるリンクをたどっおみたしょう。手動で曎新するファむルのリスト



  • package.json
  • .gitattributes
  • .flowconfig
  • App.js
  • app.js / android / app / build.gradle
  • android / app / src / debug / java / com / rndiffapp / ReactNativeFlipper.java
  • android / app / src / main / AndroidManifest.xml
  • android / app / src / main / java / com / rndiffapp / MainApplication.java
  • android / build.gradle
  • android / gradle.properties
  • android / gradle /ラッパヌ/gradle-wrapper.properties
  • android / gradlew
  • ios / Podfile
  • ios/RnDiffApp.xcodeproj/xcshareddata/xcschemes/RnDiffApp-tvOS.xcscheme
  • ios/RnDiffApp.xcodeproj/xcshareddata/xcschemes/RnDiffApp.xcscheme
  • ios/RnDiffApp/AppDelegate.m


ファむルを曎新した埌、upgradeを







実行したす。npminstallを実行したす。完了。プロゞェクトが曎新されたした。



䞻な基準は時間です。問題の曎新ず修正、たたはプロゞェクトの最初からの再構築に費やされたす。 Flutterで、コン゜ヌルに「flutterupgrade」ず入力すれば完了です。 Flutterは、すべおのプロゞェクトに察しお䞀床に曎新されたす。重倧な倉曎があるかもしれたせんが、通垞、プロゞェクト党䜓でいく぀かの倉曎があり、修正は非垞に簡単です。



2.パフォヌマンス。



それは十分ではありたせんでした。それでも私たちが望むほど速くはありたせん。テスタヌは垞に䜎い「非ネむティブ」パフォヌマンスを盗聎しおいたした。最適化が垞に圹立぀ずは限りたせんでした。アプリケヌションが倧きくなるず、ブリッゞ甚にシリアル化されるデヌタが増え、応答性が䜎䞋したす。



3.ネむティブコンポヌネントが䜿甚されおいるため、AndroidずiOSでは倖芳が異なりたす。

䞀貫性を実珟するには、䞀方のプラットフォヌムのコンポヌネントのアナログを䜜成するか、䞡方のプラットフォヌムを最初から䜜成する必芁がありたす。たたは、これらの機胜ず違いを考慮しお蚭蚈を蚭蚈したす。



同じUI。巊偎がIOS、右偎がAndroidです。







さらに



JavaScriptCore



React Nativeには、Android甚の叀いJSCoreが長い間ありたした。゚ルメスの登堎により状況は改善したしたが、おなじみの開発者やテストのレビュヌから刀断するず、すべおがそれほど単玔ではありたせん。



JS゚ンゞンの比范。



博芧䌚



それを賛吊䞡論に垰するのは難しい。箱から出しおすぐに重芁なラむブラリず機胜を提䟛したすが、長所を䞭和する独自の問題がありたす。Expoたたはネむティブコヌドを䜿甚する倖郚ラむブラリに欠けおいるプラ​​ットフォヌムレベルの機胜が必芁な堎合は、プロゞェクトをプッシュする必芁があり、Expoの長所が消えるか短所になりたす。ネむティブinitずExpoを反応させたす。



フラッタヌの短所



それらは蚀うたでもなく䞍公平でしょう。それでも、これは特効薬ではありたせん。



1.スペシャリストず欠員が少なくなりたす。

React Nativeず比范しお、Flutterをベヌスに構築しおいる開発者や䌁業は少ない。2019幎5月にFlutterで仕事を探しおいたずき、たった3瀟に出くわしたした。



2.ラむブラリの数はReactNativeよりも少なくなっおいたす。

Flutterは若いテクノロゞヌであるため、そのためのラむブラリははるかに少なくなっおいたすが、その数は掻発に増えおいたす。しかし、必芁なラむブラリがすべお利甚できるので、1幎以䞊の䜜業で、これによっお特別な問題が発生するこずはありたせんでした。



3.以䞋には適しおいたせん

  • ゲヌム。
  • 鉄での䜜業に関連するアプリケヌション。
  • 拡匵珟実アプリケヌション。プラットフォヌムごずに個別にロゞックを実装する必芁があるためです。




ただし、䞀般的なUIが倚数ある堎合は、プラットフォヌムチャネルを䜿甚しおネむティブコヌドを操䜜するか、Flutterをネむティブアプリケヌションに統合するオプションで十分です。



ドキュメンテヌション



React Nativeには、発生する倚くの質問に答える非垞に優れたドキュメントがありたす。それは埐々に改善されおおり以前は、空癜のペヌゞに出くわす可胜性がありたした。タむトルはありたすが、コンテンツはありたせん、玠材は改善されおいたす。

Flutterでは、ドキュメントは玠晎らしいです。䟋、説明、䟋を含むレシピ、ビデオ。䜕かの䜿甚に問題がある堎合、ドキュメントはそれを解決するこずができたす。



゚ントリのしきい倀



どちらの堎合も、゚ントリのしきい倀は非垞に䜎くなっおいたす。



  • React Native-JS、Reactを知っおいる必芁があり、始めるこずができたす。

  • Flutter — JS / Java / Kotlin / Swift / C ( JS — ), Dart .

    React Native, Flutter .






React Native



  • .
  • .
  • .
  • .
  • .


Flutter



  • , . .
  • , .
  • .
  • .
  • .


ナヌザヌは、ネットワヌク芁求のHttpたたはDioに䜕を䜿甚するかを気にしたせん。

その日のJS開発者たたは今月のFlutter開発者を探しおいたしたか。䞻なこずは、アプリケヌションが必芁なタスクを実行し、生産性が高いこずです。Flutterを䜿甚するず、これらの芁件をはるかに効率的に満たすこずができたす。



FlutterずReactNativeを䜿甚しお同じ問題を解決する分析は、蚘事の埌半にありたす。



All Articles