Hành trình phát triển ứng dụng Mobile từ công nghệ Cross-platform (Phần 1)
Ngày nay, ứng dụng Mobile (Mobile App) được đánh giá là kênh phân phối thông tin và kết nối đến người dùng, khách hàng hiệu quả. Xét về mặt giao diện, thân thiện đối với người dùng, ứng dụng Mobile dường như đã soán ngôi Website từ nhiều năm trước trên khắp các vùng lãnh thổ, quốc gia đã và đang có tốc độ phát triển cao.
Bài viết là quan điểm của tác giả Ngô Thái Hoàng Tuấn.
Không ngoại lệ, thị trường ứng dụng Mobile Việt Nam là một đại dương xanh mướt, sôi động và giàu tài nguyên. Nắm bắt tín hiệu này, các nhà phát triển công nghệ tiên phong đã cho chúng ta chứng kiến không ít những ứng dụng nội địa ra mắt trong vài năm gần đây. Gặt hái nhiều thành công vượt trội, sánh ngang những gã khổng lồ trong khu vực là “trái ngọt” của “những kẻ mở đường mộng mơ”. Chính vì điều này, giấc mơ “Ứng dụng thập kỷ” trở thành niềm mong ước của nhiều doanh nghiệp và chủ đầu tư trong nước. Theo thời gian, nguyện vọng ấy ngày càng rõ nét và khả thi hơn bao giờ hết. Vậy họ nên chọn nền tảng ứng dụng nào phù hợp cho mình?
Qua bài viết này, mình mong muốn chia sẻ đến mọi người thông tin và kiến thức cá nhân về một trong những nền tảng công nghệ ứng dụng phổ biến và được đánh giá tốt nhất ở thời điểm hiện tại: Nền tảng công nghệ ứng dụng Cross-platform.
Tổng quan công nghệ phát triển ứng dụng: Cross-platform là gì?
Đầu tiên, để trả lời cho câu hỏi “Cross-platform là gì?”, chúng ta cần biết về các Công nghệ phát triển ứng dụng đã và đang có mặt trên thế giới. Các khái niệm kỹ thuật cần lưu ý bao gồm:
- Cross-platform
- Native App
- Hybrid App
- Web-app (khái niệm này thường bị hiểu lầm)
Trong đó, Cross-platform hay còn được gọi là Multi-platform (đa nền tảng). Công nghệ này được viết từ 1 bộ Code trung gian – Coder sẽ thực hiện triển khai Code 1 lần, sau đó biên dịch thành 2 bản dành cho 2 hệ điều hành riêng biệt: IOS và Android.
Khác với Cross-platform, Native App được hiểu là Ứng dụng gốc. Công nghệ này được viết từ 2 bộ ngôn ngữ tách biệt hoàn toàn do Google và Apple phát triển.
Tiếp theo là Hybrid App, còn được biết đến với tên thường gọi Ứng dụng lai. Nền tảng ứng dụng này được hình thành từ 3 loại công nghệ chính là HTML, CSS và JavaScript. Hybrid App có thể hiểu là một Website rỗng được đặt trong một native container.
Sau cùng là Web-app. Đây là khái niệm mà mình có đề cập ở trên là “thường bị hiểu lầm”. Đối với Developers (các bạn kỹ thuật viên phát triển công nghệ) thì khái niệm này khá rạch ròi, tuy nhiên nhiều Marketers (các bạn công tác trong lĩnh vực Marketing) vẫn gặp sự cố nhầm lẫn giữa 3 khái niệm kỹ thuật Cross-platform, Hybrid App & Web-app. Trên thực tế, Web-app có thể hiểu là Website “động” có thể tương tác với người dùng thay vì một Website tĩnh đơn thuần.
Nên lựa chọn xây ứng dụng cross-platform?
Có tốc độ phát triển và tối ưu về nguồn lực hơn khá nhiều so với Native App, nhưng Cross-platform App vẫn có cấu trúc hoàn thiện, bao gồm: Mobile Front-end; Web Admin Portal Front-end; API (Application Programming Interface) trên Mobile và Admin Portal, được hiểu là Back-end. Đi sâu vào kỹ thuật, phần cấu trúc Mobile Front-end thường được viết bằng 1 trong 2 loại ngôn ngữ thông dụng nhất là React Native và Flutter. Các cấu trúc còn lại: Admin Portal, API Mobile & API Portal Back-end thường được lựa chọn ngôn ngữ sao cho thoải mái nhất với đội ngũ kỹ thuật viên.
Ví dụ: ReactJs, VueJs, Angular dành cho Admin Portal Front-end và Dot.net core, Golang, NodeJs, Java, Python, PHP dành cho API Back-ends.
Ở khía cạnh một nhà phát triển ứng dụng, mình thường đề xuất doanh nghiệp và nhà đầu tư nên lựa chọn một bộ ngôn ngữ có sự đồng điệu nhằm tiết kiệm chi phí, thời gian và nguồn lực khi triển khai xây dựng một ứng dụng Cross-platform:
- Mobile Front-end: React Native
- Admin Portal Front-end: ReactJs
- API Mobile & Admin Portal Back-ends: NodeJs
Ưu điểm: Cả 3 Framework (bộ mã hoá) này đều hình thành trên nền JavaScript. Vì thế, chúng ta sẽ tiết kiệm tối đa nguồn tài nguyên. Đồng thời, sự đồng điệu sẽ giúp tiết kiệm thời gian hình thành và chưa kể chi phí nhân sự kỹ thuật cho công tác vận hành và bảo trì về lâu dài. Tuy nhiên, ở các thị trường phát triển như Bắc Mỹ, Châu Âu, Trung Đông, Ấn Độ, Nhật Bản và Hàn Quốc có xu hướng lựa chọn Flutter thay vì React Native.
Khuyết điểm: Cross-platform sẽ trở nên khá yếu đuối đối với các ứng dụng có chức năng yêu cầu nặng về phần cứng hoặc yêu cầu về hiệu suất lớn. Ví dụ: Mobile Game có đồ hoạ cao, App xử lý nội dung Video (HD), hình ảnh chất lượng cao như YouTube, TikTok...
Quay lại với màn trình diễn thực tế (Performance) của ứng dụng Cross-platform. hiện nay, với công nghệ tiên tiến và hiện đại hơn rất nhiều, màn trình diễn của Công nghệ Cross-platform ngày càng thu ngắn khoảng cách với Native App. Riêng cá nhân mình đánh giá, nếu đem so sánh hiệu suất hoạt động (Performance), Ứng dụng Cross-platform đạt mức 9/10 (90%) so với những gì Ứng dụng gốc thể hiện. Thậm chí, đối với các ứng dụng có chức năng hoạt động không phụ thuộc quá nhiều vào cơ sở hạ tầng của thiết bị Mobile, không cần hiệu suất lớn, sự thể hiện của Cross-platform sẽ là 9,5/10 (95%) so với Native App.
Các ứng dụng Cross-platform nổi tiếng toàn cầu: Facebook – một ví dụ điển hình. Ứng dụng Mobile của Facebook được hình thành trên nền tảng công nghệ React Native. Đó cũng là lý do vì sao chúng ta thỉnh thoảng bắt gặp các trường hợp ảnh và video không được nét như lưu trữ trên Mobile Gallery. Tại thị trường nội địa, các ứng dụng hàng đầu cũng được hình thành từ Cross-platform là các ông lớn Thương mại điện tử như Shopee, Tiki, Lazada... Ngoài ra, Grab cũng là một cái tên nổi bật mà mình đánh giá cao.
Xin cảm ơn mọi người đã theo dõi phần chia sẻ trên của mình. Về mặt phát triển ứng dụng, mong mọi người góp ý và cùng mình thảo luận. Phần tiếp theo phía dưới đây sẽ đi sâu hơn một chút về mặt kỹ thuật mà mình muốn dành tặng cho cộng đồng Developers.
Tìm hiểu thêm về mặt kỹ thuật – Các câu hỏi thường gặp
1. Ứng dụng Cross-platform có thể viết bằng những bộ ngôn ngữ nào?
- JavaScript: Hiện nay, một vài Javascript Framework được xây dựng nhằm nhắm tới việc phát triển riêng cho nền tảng di động, cụ thể như Ionic 2 và React Native. Sử dụng các Framework và thư viện này giúp cho việc phát triển các ứng dụng di động đa nền tảng trở nên khá dễ dàng. Điều này đồng nghĩa với việc kỹ thuật viên chỉ cần viết (Coding) một lần, sau đó biên dịch và điều chỉnh thì sẽ chạy được trên cả iOS và Android.
- Dart: Dùng cho Flutter, là ngôn ngữ lập trình đa mục đích. Ban đầu được phát triển bởi Google và sau đó được Ecma (ECMA-408) phê duyệt làm thước đo Công nghệ Tiêu chuẩn. Dart được sử dụng để xây dựng các Ứng dụng Web, Server, PC (máy tính cá nhân) và thiết bị Mobile. Đây được xem là một ngôn ngữ “hướng đối tượng”, được xác định theo lớp, với cơ chế Garbage-collected, sử dụng cú pháp TypeC để dịch mã tuỳ ý sang JavaScript. Dart có thể thực hiện biên dịch thành mã ARM và x86, để các ứng dụng Mobile được xây từ Dart có thể chạy một cách tự nhiên trên cả iOS & Android, hơn thế nữa là đối với các Ứng dụng Web, chuyển hoá từ Dart sang JavaScript.
- TypeScript: TypeScript là một Superset (phiên bản tiến hoá) của JavaScript, có tính an toàn hơn thông qua việc hỗ trợ tĩnh (Static Type). Nó cũng cung cấp nhiều tính năng và hỗ trợ cho việc phát triển các ứng dụng quy mô lớn (Large-scale App). Được phát triển bởi Microsoft, TypeScript cho phép các Nhà phát triển ứng dụng viết các ứng dụng Cross-platform bằng việc sử dụng các Framework như NativeScript.
- Các ngôn ngữ khác: C#, C, C++, Python, Ruby
2. Bộ ngôn ngữ nào được đánh giá tối ưu nhất hiện nay?
Đó chính là JavaScript (React Native) và Dart (Flutter). React Native, là một Framework do chính Facebook phát triển nhằm mục đích giải quyết bài toán hiệu năng của Cross-platform, đồng thời vô tình xử lý bức tranh tài chính viết App. Thay vì phải xây ứng dụng bằng nhiều ngôn ngữ Native cho mỗi hệ điều hành Mobile tách biệt: IOS và Android. Ở chiến tuyến đối diện, Flutter được phát triển bởi Google nhằm giải quyết bài toán thường gặp với công nghệ Mobile là Fast Developing (Tối ưu Tốc độ hình thành) và Native Performance (Tối ưu hoá Hiệu năng hoạt động). Nếu như React Native chỉ đảm bảo Fast Development và Code Native thuần chỉ đảm bảo Native Performance thì Flutter đã dung hoà được cả 2 điều đó. Do vậy, như mình có đề cập phía trên: Ngày nay, ở các thị trường phát triển như Bắc Mỹ, Châu Âu, Trung Đông, Ấn Độ, Nhật Bản và Hàn Quốc có xu hướng lựa chọn Flutter thay vì React Native.
3. Nên phân bổ nguồn tài nguyên như thế nào khi phát triển ứng dụng Cross-platform?
Đối với Native App. vì phải sử dụng ngôn ngữ lập trình cho mỗi nền tảng khác nhau nên việc phân bổ nguồn lực, nhân sự sẽ nhiều hơn 2,5 lần so với Cross-platform trong giai đoạn phát triển ứng dụng, bảo trì, cũng như thời gian để hoàn thành những tính năng mới. Như mình có đề cập phần trên, Cross-platform với bộ ba Framework: React native, ReactJs và NodeJs, việc code 1 lần, sau đó có thể biên dịch và sử dụng trên 2 hệ điều hành Mobile. Lúc này, việc phân chia nhân sự tối ưu hơn Native App.
4. Khi lựa chọn Cross-platform, Doanh nghiệp và Nhà đầu tư có lợi thế là gì?
- Mạch lạc về kiến trúc: Để xây dựng một ứng dụng Cross-platform. Quá trình thiết kế buộc phải chặt chẽ, tuân thủ theo đúng mô hình (MVC, MVVM...) nhằm tách biệt phần phụ thuộc vào một hệ điều hành. Phần phụ thuộc vào phía 3rd Library (sẽ được mô tả chi tiết các phần sau). Việc này sẽ là áp lực cho Nhà thiết kế Ứng dụng. Tuy nhiên, “trái ngọt” sẽ là ứng dụng có hiệu năng cao, bảo trì dễ dàng hơn rất nhiều trong tương lai.
- Dễ dàng bảo trì và mở rộng: Như một chuỗi Domino, yếu tố mạch lạc về kiến trúc giúp việc tra cứu, chỉnh sửa lỗi Ứng dụng cũng sẽ nhanh chóng hơn, tạo điều kiện cho việc bảo trì và mở rộng cũng sẽ đạt kết quả vượt trội.
- Khả năng tái sử dụng cao: Hiển nhiên rồi. Vì có thể sử dụng đa nền tảng nên các đoạn mã sẽ dễ dàng được tái sử dụng và chia sẻ cho các ứng dụng, phần mềm khác (nếu có) dù nó là Cross-platform hoặc không. Một trong những lợi ích lớn nhất mà việc phát triển Cross-platform App mang lại là khả năng tái sử dụng mã nguồn dễ dàng. Thay vì phát hành Native App cho mỗi nền tảng Mobile, Nhà phát triển ứng dụng có thể tái sử dụng phần lớn mã nguồn và triển khai cùng một Ứng dụng trên nhiều nền tảng khác nhau. Ví dụ: Các ứng dụng chuyển đổi linh hoạt giữa B2C – B2B như Vexere, Ahamove...
- Rút ngắn thời gian phát triển, tiết kiệm chi phí và nguồn lực: Công việc ít hơn cũng có nghĩa là thời gian triển khai nhanh hơn, chi phí. Do đó, dành ít thời gian hơn cho việc phát triển có nghĩa là Doanh nghiệp có thể cung cấp giá trị cho khách hàng nhanh hơn và tốn ít chi phí hơn trong việc điều chỉnh ứng dụng sao cho phù hợp với nhu cầu của khách hàng. Điều này là vô cùng quan trọng, đặc biệt với các Doanh nghiệp Startup khi mà họ luôn phải đổi mình liên tục.
- Sau cùng, như mình đã đề cập trên bài, xét về App Performance hay nói cách khác là thang điểm UX/UI. Trải nghiệm người dùng trên Cross-platform App không kém cạnh Native App. Mặc dù luôn có sự khác biệt về UI/UX giữa Android và IOS, nhưng với những Framework như Flutter hay React Native, các Nhà phát triển ứng dụng hiện nay đã có thể phát triển những Cross-platform App với trải nghiệm người dùng được đánh giá tiến bộ vượt trội so với trong quá khứ. Ví dụ: Facebook, Twitter...
Cảm ơn mọi người đã dành thời gian theo dõi.