Bỏ qua menu, vào nội dung chính

React Native hay lập trình thuần (Swift, Kotlin)

React Native phù hợp phần lớn ứng dụng doanh nghiệp và thương mại: một bộ mã chạy cả iOS và Android nên chi phí và thời gian thấp hơn. Lập trình thuần bằng Swift và Kotlin cần thiết khi ứng dụng xử lý đồ hoạ nặng, AR, camera chuyên sâu hoặc đòi hỏi hiệu năng rất cao.

Từng lựa chọn

Đây là quyết định kiến trúc cần chốt sớm vì đổi hướng về sau gần như phải viết lại. Phần dưới đối chiếu hai hướng theo chi phí, thời gian, hiệu năng và khả năng bảo trì.

React Native + Expo

10 - 24 tuần

Một bộ mã cho cả iOS và Android

Ưu điểm

  • Chi phí thấp hơn đáng kể so với hai bộ mã riêng
  • Một đội phát triển cho cả hai nền tảng
  • Dễ tuyển lập trình viên và chuyển giao bảo trì
  • Xem thay đổi gần như tức thì khi phát triển
  • Dùng chung logic với website Next.js
  • Cập nhật giao diện và logic qua mạng (Expo), không chờ duyệt lại
  • Nhiều thư viện có sẵn

Hạn chế

  • Hiệu năng thấp hơn với giao diện rất phức tạp
  • Tính năng phần cứng đặc thù vẫn cần viết mã thuần
  • Nâng cấp thư viện đôi khi gây lỗi, cần kiểm thử kỹ
  • Dung lượng ứng dụng lớn hơn
  • Hiệu ứng chuyển động phức tạp cần tối ưu riêng

Chọn khi

  • Giao diện dạng danh sách, biểu mẫu, thẻ thông tin
  • Cần tối ưu ngân sách
  • Cần ra mắt iOS và Android cùng lúc
  • Đội phát triển ít người
  • Đã có website Next.js, muốn dùng chung logic

Lập trình thuần (Swift + Kotlin)

20 - 52 tuần

Hai bộ mã riêng: iOS viết bằng Swift, Android viết bằng Kotlin

Ưu điểm

  • Hiệu năng cao nhất, chuyển động mượt
  • Truy cập đầy đủ API hệ điều hành và phần cứng
  • Giao diện theo đúng chuẩn từng nền tảng
  • Dung lượng ứng dụng nhỏ hơn
  • Dễ làm hiệu ứng phức tạp
  • Xử lý camera và video chất lượng cao

Hạn chế

  • Chi phí gần gấp đôi vì hai đội và hai bộ mã
  • Thời gian phát triển dài hơn
  • Sửa lỗi phải làm trên cả hai bộ mã
  • Khó tuyển lập trình viên Swift hơn
  • Giữ tính năng đồng bộ giữa hai nền tảng tốn công

Chọn khi

  • Ứng dụng đồ hoạ nặng: game, AR/VR, 3D
  • Xử lý camera, video chuyên sâu
  • Yêu cầu hiệu năng rất cao
  • Ngân hàng, tài chính có yêu cầu bảo mật khắt khe
  • Ứng dụng đã có nhiều người dùng, hiệu năng là yếu tố then chốt

Chi tiết theo tiêu chí

Chi phí và tiến độ
Tiêu chíReact NativeThuần
Chi phí phát triểnThấp hơnCao, gần gấp đôi
Thời gian (ứng dụng tương đương)10-24 tuần20-52 tuần
Bảo trì hằng nămMột bộ mãHai bộ mã
Thêm một nền tảngDùng lại phần lớn mãViết mới toàn bộ
Hiệu năng
Tiêu chíReact NativeThuần
Giao diện cơ bảnMượtMượt
Hiệu ứng phức tạpCần tối ưuMượt sẵn
Thời gian khởi độngChậm hơnNhanh hơn
Bộ nhớ sử dụngCao hơnThấp hơn
Trải nghiệm lập trình
Tiêu chíReact NativeThuần
Xem thay đổi khi sửa mãGần như tức thìPhải biên dịch lại
Dùng chung mã với webCó (Next.js)Không
Nguồn lập trình viênDồi dàoÍt hơn, nhất là Swift
Cập nhật qua mạngCó (Expo EAS Update)Không, phải gửi duyệt lại
Tính năng gốc
Tiêu chíReact NativeThuần
Camera cơ bảnCó thư viện sẵnHỗ trợ đầy đủ
Camera AR, 3DKhóHỗ trợ đầy đủ
Thông báo đẩyQua FirebaseAPNs, FCM trực tiếp
Sinh trắc học (Face ID, vân tay)Có thư viện sẵnHỗ trợ đầy đủ

Tình huống thường gặp

  • Ứng dụng đặt món cho chuỗi 5-20 cửa hàng

    React Native. Giao diện tiêu chuẩn: danh sách món, giỏ hàng, thanh toán, theo dõi đơn. Không cần phần cứng đặc biệt.

  • Ứng dụng ngân hàng, tài chính có định danh điện tử và sinh trắc học

    Thuần, hoặc React Native kèm phân hệ viết thuần. Yêu cầu bảo mật cao và cần API sinh trắc học ổn định. Có thể dùng React Native cho phần chung và viết thuần các phân hệ nhạy cảm.

  • Mạng xã hội có camera và bộ lọc hình ảnh

    Thuần. Xử lý hình ảnh thời gian thực và bộ lọc AR đòi hỏi hiệu năng mà React Native khó đáp ứng.

  • Ứng dụng CRM nội bộ cho đội kinh doanh 50 người

    React Native. Chủ yếu là biểu mẫu, không đòi hỏi hiệu năng cao, cần có cả iOS và Android sớm.

  • Game, AR, VR

    Thuần (hoặc Unity, Unreal). Cần truy cập trực tiếp Metal, OpenGL, ARKit, ARCore. React Native không phù hợp.

Nhận định của Alodev

Với phần lớn ứng dụng doanh nghiệp, Alodev đề xuất React Native. Lập trình thuần chỉ cần khi ứng dụng có yêu cầu đặc biệt về hiệu năng hoặc phần cứng. Trường hợp trung gian có thể kết hợp: ứng dụng viết bằng React Native, các phân hệ nhạy cảm như sinh trắc học, mã hoá viết thuần.

Dịch vụ thiết kế app di động

Câu hỏi thường gặp

Nên chọn React Native hay Flutter?

React Native có hệ sinh thái thư viện lớn, dễ tuyển lập trình viên và dùng chung mã với website Next.js. Flutter có giao diện nhất quán và hiệu năng tốt, nhưng nguồn lập trình viên trong nước ít hơn. Với đa số dự án trong nước, React Native là hướng an toàn hơn.

Lập trình thuần có còn cần thiết không?

Có. Apple và Google vẫn phát hành API mới cho lập trình thuần mỗi năm, và các ứng dụng game, AR, camera chuyên sâu, ngân hàng vẫn cần hướng này. Hai hướng cùng tồn tại, mỗi hướng phục vụ một nhóm ứng dụng khác nhau.

Expo khác gì React Native không dùng Expo?

Expo cung cấp sẵn công cụ build (EAS Build) và cập nhật qua mạng, giúp phát triển nhanh hơn. React Native không dùng Expo cho quyền kiểm soát đầy đủ hơn. Có thể bắt đầu với Expo và chỉ chuyển khi cần một mô-đun thuần chưa được hỗ trợ.

Có chuyển ứng dụng thuần sang React Native được không?

Được, nhưng thực chất là viết lại. Chỉ tái sử dụng được thiết kế và logic nghiệp vụ, mã Swift hoặc Kotlin không chuyển đổi tự động. Khối lượng gần tương đương làm mới.

Ứng dụng React Native có được Apple, Google duyệt bình thường không?

Có. Kho ứng dụng không phân biệt React Native với ứng dụng thuần, chỉ kiểm tra theo quy định chung về quyền riêng tư, nội dung và chất lượng. Dung lượng lớn hơn một chút không phải lý do bị từ chối.

Trao đổi trước khi chọn

Cần tư vấn?