So sánh chi tiết mọi khía cạnh tính đến tháng 10/2026 — đào sâu vào hiệu năng native và triển khai đa thiết bị. Điểm cốt lõi của năm 2026: khoảng cách hiệu năng từng rất lớn đã thu hẹp đáng kể — React Native đã xóa hoàn toàn "cái bridge" cũ, còn Flutter đã xóa "shader jank" bằng Impeller.
Khác biệt gốc rễ: React Native mượn UI native của hệ điều hành và gọi xuống native đồng bộ; Flutter tự vẽ mọi pixel bằng engine riêng sau khi biên dịch Dart thành mã máy. Mọi khác biệt về hiệu năng, kích thước app và cảm giác sử dụng đều bắt nguồn từ đây.
New Architecture mặc định cho project mới (JSI + Fabric + TurboModules).
Kiến trúc cũ bị tắt vĩnh viễn, không còn flag bật lại.
Hermes V1 thành JS engine mặc định. Case Expensify (production): tổng thời gian đến interactive cải thiện 7.6% Android, 2.5% iOS ⚠ (trích 1 nguồn, chưa xác minh độc lập).
Code bridge cũ bị xóa hoàn toàn — module kiểu RCTBridgeModule / ReactContextBaseJavaModule không còn chạy được; lớp tương thích (interop layer) cũng bị xóa. Expo SDK 55 (2/2026) cũng đã bỏ hỗ trợ kiến trúc cũ.
Bản latest theo docs chính thức (kiểm tra live 18/10/2026). 0.88 vừa release ~15/10/2026 theo GitHub/devtalk ⚠ docs chưa kịp cập nhật. Nhịp release ~2 tháng/bản.
Impeller mặc định trên iOS (từ 3.10) rồi Android (từ 3.16), thay Skia. Điểm mấu chốt: shader được precompile tại lúc build → xóa "shader compilation jank" — giật frame đầu tiên khi animation chạy lần đầu, lời phàn nàn lâu năm nhất về Flutter Android.
Nhánh 3.47 stable; 3.47.7 release 10/10/2026 kèm Dart 3.13.5. Impeller thành mặc định trên cả macOS/Windows/Linux. Web vẫn dùng Skia. Desktop hiện dùng backend OpenGL ES; Vulkan cho desktop vẫn là bản thiết kế chưa xong ⚠.
Dự kiến: xóa hoàn toàn backend Skia trên Android 10+ (Impeller là đường render duy nhất); WebAssembly lazy/deferred loading lên GA; Dart 3.14 (Augmentations giúp codegen gọn hơn); hỗ trợ day-zero Android 17 và iOS mới.
Flutter nhỉnh hơn ở cold start và FPS duy trì; RN kiến trúc mới đã thu hẹp mạnh khoảng cách so với thời pre-Fabric. Dưới đây là số đo thực tế 2025–2026 từ 3 nguồn độc lập.
| Chỉ số | React Native | Flutter | Nguồn |
|---|---|---|---|
| Cold start | Android 1.84s · iOS 1.12s (app client thật); tổng hợp khác: iOS trung vị ~480ms; e-commerce 450ms Android / 350ms iOS | Android 1.61s · iOS 1.09s; tổng hợp: iOS trung vị ~310ms; e-commerce 320ms / 280ms — nhanh hơn ~25–30% | A (Nordstone 4/2026) · B (tech-insider 2026) · C (weelorum 2026) |
| Frame trong ngân sách 16ms | 95.2% frame đạt ngân sách | 98.5% frame đạt ngân sách (list 1.000 item có ảnh) | C (weelorum, 50 lần chạy, app e-commerce 5 màn hình) |
| Scroll list | 55–60 FPS (58fps list thuần, 52fps khi có ảnh mạng) | 60–120 FPS (59–60fps ổn định trong đo của nguồn A) | A + B |
| RAM | Idle 112MB · nặng 198MB; tổng hợp app vừa ~110–140MB; e-commerce 95MB | Idle 98MB · nặng 167MB; tổng hợp ~90–120MB; e-commerce 85MB | A · B · C |
| App size hello-world | iOS ~8MB / Android ~25MB; APK release tối giản 10.8MB (Hermes bytecode gọn) | iOS ~11MB / Android ~16MB; APK 12.5MB ⚠ Đảo chiều so với nguồn A — cách đóng gói/module native ảnh hưởng nhiều hơn framework khi app lớn dần. | B (trích SynergyBoat/Appiko 2025, Completedigi 2026) · C |
Ba nhóm tác vụ nặng nhất trên mobile. Nguyên tắc chung: hiệu năng thật do engine/runtime native quyết định (three.js, ARKit/ARCore, LiteRT/ExecuTorch/ONNX Runtime) — framework chỉ là lớp bọc. Khác biệt nằm ở độ chín của thư viện, đường truyền dữ liệu (zero-copy hay serialize) và chi phí bộ nhớ cộng thêm. Phiên bản dưới đây kiểm tra live ngày 18/10/2026.
| Khía cạnh | React Native | Flutter |
|---|---|---|
| Đường 3D chính | three.js + @react-three/fiber (R3F) — renderer React cho three.js, chạy trên RN qua expo-gl (WebGL). Hệ sinh thái web 3D lớn nhất hành tinh dùng lại gần như nguyên vẹn, kèm @react-three/drei (helper: camera controls, loader, environment…). |
Không có "three.js của Flutter". Xem model: flutter_3d_controller / model_viewer_plus (bọc web component <model-viewer> trong WebView). Game 3D: flame_3d — vẫn ở bản 0.x thử nghiệm. |
| Phiên bản (18/10/2026) | @react-three/fiber 9.8.0 (22/9/2026; v9 đi cặp React 19, v10 đang alpha), three.js r186. R3F 9 đã hỗ trợ đường WebGPURenderer ở phía web. |
flutter_3d_controller 2.3.0 (pub.dev, cập nhật 13/9/2025) · model_viewer_plus 1.10.0 · flame 1.38.2 stable (2.0.0-dev.1 preview) · flame_3d 0.3.1 (2/10/2026, yêu cầu Flutter ≥ 3.47). |
| Cách render | Scene graph do JS/TS điều khiển, GPU vẽ qua WebGL (OpenGL ES). Render loop chạy ngoài React nên overhead React ≈ 0; điểm nghẽn là JS thread khi scene rất nhiều object/cập nhật mỗi frame. | Viewer glTF/GLB chạy trong WebView (model-viewer) → render native của trình duyệt con, nhưng cộng chi phí WebView + PlatformView. OBJ có renderer thuần Flutter riêng (nhẹ, ít tính năng). flame_3d vẽ qua Impeller nhưng API chưa ổn định. |
| Định dạng & tính năng | glTF/GLB chuẩn, PBR, animation, post-processing, physics qua thư viện three.js — ngang bản web. | GLB/glTF + OBJ (FBX mới "planned" ở flutter_3d_controller); animation/texture/camera control đủ cho use case xem sản phẩm 3D, không phải làm game/scene phức tạp. |
| Hiệu năng & RAM | FPS do three.js + GPU quyết định; scene vừa (viewer sản phẩm, configurator) mượt 60fps. RAM cộng thêm: JS heap giữ scene graph — scene lớn cần kỷ luật dispose texture/geometry. | Render trong WebView cho FPS tốt với model đơn lẻ, nhưng RAM cộng thêm của WebView + lớp PlatformView và nguy cơ jank khi 3D nằm trong layout cuộn phức tạp (đúng điểm yếu PlatformView đã nêu ở Phần 2). |
| Chốt | Thắng rõ — 3D là sân nhà của hệ three.js. | Đủ tốt cho viewer model đơn giản; 3D/game 3D nghiêm túc → cân nhắc Unity/native. |
| Khía cạnh | React Native | Flutter |
|---|---|---|
| Thư viện chính | ViroReact — @reactvision/react-viro (ReactVision duy trì, MIT): bọc ARKit (iOS) + ARCore (Android), khai báo scene bằng component React (<ViroARScene>, <Viro3DObject>), có PBR, particles, physics. |
ar_flutter_plugin (cộng đồng): widget ARView + platform channel xuống ARKit/ARCore — detect mặt phẳng ngang/dọc, anchor, đặt model 3D. Đường phụ: model_viewer_plus mở AR qua Scene Viewer (Android) / Quick Look (iOS) cho use case xem sản phẩm. |
| Phiên bản & nhịp bảo trì (18/10/2026) | react-viro 2.57.3 — đã test & hỗ trợ qua Expo SDK 57 / RN 0.86, tương thích New Architecture. Release đều đặn trong 2026. |
Plugin gốc nhịp release chậm hơn hẳn (bản tham chiếu phổ biến vẫn 0.6.x/0.7.x) ⚠ — khi chốt dự án AR bằng Flutter cần audit kỹ trạng thái maintainer và tính năng cần dùng. |
| Mở rộng nền tảng | Vượt trội: cùng codebase mở rộng lên Meta Quest (VR/MR qua OpenXR, cần Expo SDK 55+/RN 0.83+) và visionOS (peer package riêng), thêm bản web renderer. | Chỉ iOS/Android. Không có đường chính thức lên Quest/visionOS. |
| Hiệu năng & RAM | Tracking/SLAM do ARKit/ARCore native làm → chất lượng tracking ngang nhau ở cả hai bên. Render scene trong Viro là native; chi phí framework gần như bằng 0 lúc chạy AR session. | Tracking cũng do ARKit/ARCore; nhưng AR view là PlatformView → cộng chi phí compositing/RAM, và lệnh điều khiển qua platform channel bất đồng bộ. AR toàn màn hình thì chênh lệch nhỏ; AR nhúng trong UI cuộn thì Flutter bất lợi hơn. |
| Chốt | Thắng rõ — AR là một trong số ít mảng RN có thư viện chín vượt trội. | AR cơ bản (đặt model, detect plane) làm được; AR là tính năng lõi của sản phẩm → rủi ro thư viện cao hơn. |
| Khía cạnh | React Native | Flutter |
|---|---|---|
| Runtime chính | react-native-executorch (Software Mansion, chạy ExecuTorch của Meta — LLM, TTS, vision có model đóng gói sẵn) · react-native-fast-tflite (LiteRT/TFLite qua Nitro Modules) · onnxruntime-react-native (Microsoft) · thêm Callstack react-native-ai: Apple Foundation Models + Gemini Nano + llama.rn sau cùng một API kiểu Vercel AI SDK. | tflite_flutter (binding FFI tới LiteRT/TFLite C API) · flutter_onnxruntime (FFI, ONNX Runtime) · flutter_onnxruntime_genai (chạy LLM/VLM kiểu Phi-3.5 Vision) · google_mlkit_*: bọc ML Kit native cho các tác vụ có sẵn (OCR, face, barcode…). |
| Phiên bản (18/10/2026) | react-native-executorch 0.10.5 (6/10/2026) — bản 0.10 viết lại: thêm backend Core ML, MLX, Vulkan; yêu cầu RN ≥ 0.76, chỉ New Architecture, iOS 17+/Android 13+ · react-native-fast-tflite 3.0.1. Runtime nền: LiteRT 2.3.0 (7/10/2026 — TFLite đã đổi tên thành LiteRT từ 9/2024). |
tflite_flutter 0.12.1 (cuối 2025 ⚠ nguồn howto) · flutter_onnxruntime chạy ONNX Runtime 1.28.0 (Android/iOS/macOS) / 1.28.3 (desktop) · flutter_onnxruntime_genai 0.1.6. |
| Đường truyền dữ liệu camera → model | VisionCamera + frame processors (v4.7.2, 9/2025 ⚠): frame được xử lý trong worklet trên camera thread, fast-tflite dùng zero-copy ArrayBuffer qua Nitro/JSI — không copy frame qua bridge, không serialize. Đây là pattern "frame processor" giữ reference object native mà JSI mở ra (xem Phần 5). | tflite_flutter/onnxruntime qua dart:ffi: gọi trực tiếp, đồng bộ, không serialize tensor — nhưng nên chạy trong isolate riêng (IsolateInterpreter) để không block UI isolate. ML Kit qua platform channel thì frame phải qua serialize → hợp tác vụ lẻ (quét 1 ảnh), không hợp pipeline realtime dày. |
| Tăng tốc phần cứng | Delegate theo runtime: CoreML/Metal (iOS), NNAPI/XNNPACK/GPU delegate (Android); ExecuTorch 0.10 thêm MLX + Vulkan. fast-tflite hỗ trợ GPU delegate CoreML/Metal/OpenGL. | Cùng các delegate đó qua FFI (GpuDelegateV2, CoreML delegate, NNAPI). Ngang nhau — delegate là của runtime native, không phải của framework. |
| Hiệu năng suy luận | Thời gian inference của cùng một model gần như do runtime + delegate + chip quyết định, không do framework: cả hai bên đều chạm tới cùng LiteRT/ONNX/ExecuTorch native. Khác biệt thực tế nằm ở đường đi của frame (mục trên) và chi phí copy bộ nhớ. Đo độc lập hiếm hoi (dev.to, cuối 2026, RN 0.87, chạy trên Mac/simulator — không phải số trên điện thoại ⚠): Apple Foundation Models cho structured output hợp lệ 20/20 lần vs ExecuTorch Llama 3.2 1B chỉ 2/20 — bài học là chất lượng model/engine quan trọng hơn framework bọc ngoài. | |
| Bộ nhớ | RAM ≈ kích thước model (sau lượng tử hoá) + buffer frame. Zero-copy giúp tránh nhân đôi buffer camera. LLM 1B chạy on-device là khả thi (ExecuTorch đóng gói sẵn Llama 3.2 1B) nhưng ngốn RAM theo cỡ model — không phải do RN. | Tương tự: model + tensor arena của interpreter chiếm phần lớn. FFI tránh serialize nhưng quên giải phóng bộ nhớ native (FFI tự quản lý) → leak/OOM theo thời gian, đúng cảnh báo ở Phần 5. Chạy inference trong isolate cộng thêm heap của isolate đó. |
| Chốt | Nhỉnh hơn ở camera-ML realtime (VisionCamera frame processor + zero-copy là hệ sinh thái hoàn chỉnh nhất) và ở mảng LLM on-device đóng gói sẵn (ExecuTorch, react-native-ai). | Ngang sức cho inference từng ảnh/tác vụ rời; FFI rất mạnh khi model là thư viện C/C++ (vd. llama.cpp). Camera pipeline realtime cần tự ghép nhiều mảnh hơn. |
iOS/Android ngang nhau. Khác biệt nằm ở các nền tảng phụ: Flutter first-class gần như mọi nơi; RN dựa vào cộng đồng và Microsoft — nhưng lại thống trị mảng TV.
| Nền tảng | React Native | Flutter |
|---|---|---|
| iOS | First-class | First-class |
| Android | First-class | First-class |
| Web | Cộng đồng react-native-web — ổn cho UI đơn giản/app-like; web phức tạp cần kiến trúc cẩn thận. Có Tamagui (zero-runtime cho web) và React Strict DOM (mốc 2026, đơn nguồn ⚠) giúp share code mobile–web. | First-class chính thức Wasm lazy loading GA từ 3.50 (11/2026). Hợp dashboard/web-app, không hợp web cần SEO. |
| Windows | Qua Microsoft react-native-windows do Microsoft duy trì — v0.82 (2026) chỉ chạy Fabric, hỗ trợ XAML cho community modules; dùng nhiều trong enterprise (Teams, Messenger Desktop). | First-class |
| macOS | Cộng đồng/Microsoft react-native-macos. | First-class |
| Linux | Không có đường chính thức | First-class |
| TV (Android TV / tvOS) | Mạnh nhất Fork react-native-tvos theo kịp bản core; Expo có tài liệu build TV chính thức; Amazon dùng cho Fire OS/Vega, DIRECTV dùng production. Tái dùng 70–80% business logic từ app RN mobile. | Thử nghiệm Android TV được, tvOS experimental; LG công bố hỗ trợ webOS từ 2024. |
| Embedded | Không first-class | Có flutter-pi, Fuchsia — chưa phổ biến rộng. |
Chia sẻ code thực tế: RN ~80–90%, Flutter ~95–100% giữa iOS/Android (logic share gần hết; phần lệch là UI tinh chỉnh theo platform và native module). Lưu ý: trang TV trên docs RN chính thức đã deprecated và chuyển sang repo react-native-tvos (kiểm tra live 18/10/2026).
Khi cần SDK lạ (thanh toán, BLE, camera ML…), cả hai đều bắt buộc viết Swift/Kotlin — không framework nào miễn được. Khác nhau ở công cụ sinh binding và mô hình gọi.
react-native-directory khi chốt dependency).flutter create --template=package_ffi + build hooks + ffigen.Với SDK vendor chỉ có sẵn cho iOS/Android native (không wrapper), chi phí viết wrapper tương đương nhau. RN có bề dày module cộng đồng hơn cho tích hợp "dị"; Flutter có Pigeon sạch hơn cho API lớn và FFI vượt trội khi SDK là thư viện C/C++.
TypeScript thắng ở pool nhân lực; Dart thắng ở tính nhất quán của toolchain. Ở Việt Nam, đây thường là yếu tố quyết định hơn cả benchmark.
flutter), CI/CD tốt với GitHub Actions/Codemagic/Bitrise; FlutterFlow là builder low-code "gần chính thức".
Cập nhật JS/Dart mà không qua review store. Giới hạn chung của cả hai: OTA chỉ cho code JS/Dart, style, asset — đụng native code, quyền, entitlement, SDK version, icon, splash, app extension → bắt buộc build store mới.
shorebird release / shorebird patch; patch chỉ Dart (không native/asset), tải nền lúc mở app, áp dụng khi restart.| Chỉ số (giữa–cuối 2026) | React Native | Flutter |
|---|---|---|
| Package registry | npm 2M+ (ước ~400k dùng được cho RN); React Native Directory: 2.707 thư viện (25/9/2026) | pub.dev ~40–45k packages, có hệ thống scoring lọc chất lượng |
| Download / tuần | react-native ~9,7–11M (npm) | n/a (pub.dev) |
| GitHub stars | ~126k | ~178k |
| Stack Overflow survey | Usage 8,4% · admired 56,5% | Usage 9,4% · admired 60,6% |
| Firebase | Cộng đồng duy trì | First-party (FlutterFire) |
Material 3 mặc định + Cupertino — bộ UI "chính hãng", đồng nhất, ít phải chọn. Đánh đổi: muốn thoát khỏi chất Material/Cupertino mặc định thì phải tự custom nhiều hơn.
Meta — Facebook, Instagram, Messenger (một phần) · Shopify (toàn bộ mobile apps, cam kết từ 2020) · Microsoft — Office mobile, Outlook, Teams, Xbox · Discord (iOS) · Coinbase · Walmart · Bloomberg · Pinterest · Tesla · Duolingo (~95% app)
Google Pay (gộp 1,7 triệu dòng code iOS+Android thành 1 codebase, 100M+ users) · Google Ads, Classroom, Earth, NotebookLM · BMW (My BMW) · Toyota (infotainment RAV4 2026) · Alibaba Xianyu (50M+ users — app Taobao chính không phải Flutter) · Nubank (80–100M+ users) · ByteDance/Lark · Tencent · eBay Motors · Philips Hue · Wolt · KFC India · Hamilton
Ghi chú: case Airbnb rời RN năm 2018 vẫn hay bị trích — đã lỗi thời, xảy ra trước New Architecture 5+ năm, không còn giá trị tham chiếu.
| Tiêu chí | → Chọn React Native | → Chọn Flutter |
|---|---|---|
| 1 · Team hiện có | Team đã biết JS/TS/React (đặc biệt có web React) — lên tay ngay, share được logic/API client/validation với web. | Team bắt đầu từ số 0, hoặc team mobile thuần không vướng JS — học Dart 2–4 tuần rồi đi một mạch. |
| 2 · Web/desktop sau này | Web là "có thể", hoặc web app React đã tồn tại → share logic qua RN Web/Tamagui. | Web/desktop là mục tiêu chắc chắn → Flutter first-class cả 5 nền tảng từ 1 codebase. |
| 3 · UI / hiệu năng | Cần cảm giác native từng platform "miễn phí"; nhúng sâu SDK native (map, camera pipeline, BLE, AR). | Animation nặng, custom UI, pixel-perfect đồng nhất mọi máy; 120fps; vẽ canvas/chart/telemetry realtime. |
| 4 · Ngân sách & tuyển dụng (VN) | Ngân sách hạn chế, cần scale team nhanh ở VN — pool JS lớn gấp 10–15 lần, lương mềm hơn. | Chấp nhận trả premium 10–20% và tuyển lâu hơn, đổi lấy toolchain gọn + ít bug lệch platform dài hạn. |
| 5 · Vận hành sau release | Cần OTA mạnh, rẻ, trưởng thành (EAS Update: diff nhỏ, rollback, crash-halt) để hotfix hàng ngày. | Chấp nhận OTA Dart-only qua Shorebird (phí theo lượt cài), hoặc release theo nhịp store truyền thống. |
| 6 · 3D / AR / AI on-device | 3D three.js, AR (ViroReact + Quest/visionOS), camera-ML realtime (VisionCamera frame processor), LLM on-device đóng gói sẵn. | 3D chỉ ở mức viewer model; ML qua FFI rất mạnh với thư viện C/C++; AR cơ bản đủ dùng. |
| React Native | Flutter | |
|---|---|---|
| Chủ quản | Meta → React Foundation (Linux Foundation) | |
| Ngôn ngữ | TypeScript / JavaScript | Dart |
| Bản mới nhất (18/10/2026) | 0.87 (docs); 0.88 vừa release ~15/10 ⚠ | 3.47.7 (10/10/2026); 3.50 stable 11/2026 |
| Kiến trúc 2026 | JSI + Fabric + TurboModules; bridge cũ đã xóa (0.85); Hermes V1 mặc định | Dart AOT; Impeller thay Skia (xóa nốt trên Android 10+ ở 3.50) |
| Vẽ UI | Native view thật | Tự vẽ từng pixel |
| Cold start | Nhanh (thua Flutter ~25–30%) | Nhanh hơn |
| FPS animation nặng | 60fps đa số case (Reanimated v4); đuối ở particle/canvas cực nặng | 60–120fps ổn định |
| RAM / app size | Tương đương; nhỉnh hơn một chút ở build tối giản (Hermes bytecode) | Nhỉnh hơn một chút ở app thật |
| Web / Desktop | Cộng đồng (RN Web; Win/macOS via Microsoft) | First-class |
| TV | Mạnh nhất (react-native-tvos, Expo TV) | Thử nghiệm |
| 3D | three.js + R3F 9.8 — hệ sinh thái 3D lớn nhất | Viewer qua WebView (flutter_3d_controller 2.3); flame_3d 0.3 thử nghiệm |
| AR | ViroReact 2.57 — ARKit/ARCore + Quest + visionOS | ar_flutter_plugin (cộng đồng, nhịp chậm) ⚠ |
| AI/ML on-device | ExecuTorch 0.10.5 · fast-tflite (zero-copy) · ONNX · VisionCamera frame processor | tflite_flutter (FFI) · flutter_onnxruntime (ORT 1.28) · ML Kit |
| Native module | TurboModules + Codegen (đồng bộ qua JSI) | MethodChannel / Pigeon (codegen) / dart:ffi |
| Hot reload | Fast Refresh (~0,5–1s) | ~300ms, giữ state tốt |
| OTA | EAS Update (trưởng thành); CodePush chết 3/2025 | Shorebird (phí theo lượt cài) |
| UI library | NativeWind / Tamagui 3 / Unistyles 3 (phải chọn) | Material 3 + Cupertino (có sẵn) |
| Package | npm 2M+ (~400k dùng được); RN Directory 2.707 lib | pub.dev ~45k (có scoring) |
| Tuyển dụng VN | Dễ, rẻ (pool JS khổng lồ) | Khó hơn, lương cao hơn, cầu +35%/2025 |
| App lớn | Instagram, Shopify, Teams, Tesla, Duolingo | Google Pay, BMW, Toyota, Nubank, Xianyu |
| Chọn khi | Team JS sẵn; cần native-feel; cần OTA; có web React | Animation nặng; cần web/desktop 1 codebase; team từ số 0 |
reactnative.dev/versions.expo.dev/pricing trước khi lập ngân sách.tflite_flutter 0.12.1 và VisionCamera 4.7.2 lấy từ nguồn howto/blog — kiểm tra lại trên pub.dev/npm khi chốt dependency. Nhịp bảo trì của ar_flutter_plugin được đánh giá từ lịch sử phiên bản phổ biến (0.6.x/0.7.x), nên audit trực tiếp repo trước dự án AR nghiêm túc.Báo cáo nghiên cứu kiểm tra live ngày 18/10/2026, cộng phần kiểm tra phiên bản thư viện 3D/AR/ML cùng ngày.