Áp dụng công nghệ mới vào lập trình mobile, cần lưu ý gì?

Năm 2015 sẽ tiếp tục chứng kiến sự phát triển chóng mặt của xu hướng mobile. Rất nhiều câu hỏi được đặt ra khi bắt đầu một dự án mobile, như việc chọn lựa công nghệ, ngôn ngữ phát triển, phong cách thiết kế… Bên cạnh ngôn ngữ gốc (native language) Obj-C cho iOS; Java cho Android, thời gian qua cũng chứng kiến sự phát triển vượt bậc của các công nghệ xuyên nền tảng (cross platform) như HTML5, Titanium, Xamarin… với tư duy lập trình một lần chạy trên nhiều nền tảng.

app-needs-100050606-orig

Tuy nhiên, nếu các công ty và startup không cân nhắc kỹ các yếu tố sẽ rất dễ mắc sai lầm không thể khắc phục. Vậy khi nào thì nên dùng native, khi nào thì sử dụng HTML5 và khi nào thì nên ứng dụng Cross Plaform?

Khi nào thì nên dùng HTML5?

nativevshtml5

Hiện tại có một vài HTML5 framework  như JoApp, Sencha Touch, Jquery Mobile… có thể dễ dàng xây dựng nên 1 ứng dụng trông giống hệt ứng dụng native từ slidebar cho đến left menu, hiệu ứng trượt đến hiệu ứng lật. Với những ưu điểm không thể chối cãi, bạn hoàn toàn tiết kiệm được rất nhiều thời gian cho việc phát triển ứng dụng bằng HTML5 và chúng có thể chạy trên iOS, Android, Winphone.

Tuy nhiên, các ứng dụng HTML5 thường sẽ giật ở những chuyển động nhanh hoặc những khi ứng dụng đang thực hiện nhiều tính toán, điều này ảnh hưởng nghiêm trọng về mặt trải nghiệm, vốn là điều rất quan trọng trong ứng dụng di động. Bạn cũng đừng quá tin vào quảng cáo của các framework rằng họ đã tối ưu tốt đến nỗi rất gần với native, bởi vì tất cả chúng phải thông qua sự hiển thị của trình duyệt mặc định của hệ điều hành.

Ngay cả những phiên bản đầu tiên của ứng dụng Facebook cũng mắc phải sai lầm này khi dùng HTML5. Sau đó họ cũng đã sửa sai khi lần lượt ra mắt ứng dụng riêng cho từng nền tảng bằng native.

applancer_nativevshtml5

Một thông tin thêm bạn nên lưu ý, trình duyệt trên iOS còn có một engine tăng tốc độ hiển thị tên là Nitro Javascript, giúp cho các demo của HTML5 trông mượt mà hơn do được tăng gấp đôi tốc độ. Tuy nhiên Apple chỉ bật engine này trên Safari, còn trên các ứng dụng bên thứ ba có nhúng trình duyệt (như các app build từ PhoneGap), và ngay cả Google Chrome thì tốc độ cũng giảm chỉ còn một nửa. Rất may với iOS 8 trở lên thì điều này được khắc phục

Ngoài ra, việc truy cập vào những thiết bị phần cứng như camera, GPS, micro, tích hợp Facebook, Twitter… cũng sẽ khó khăn hơn nhiều vì multi-touch cũng không quá xuất sắc. Đã thế trên iOS còn có độ trễ 300ms khi bạn touch trên trình duyệt và điều đó tạo nên rào cản khá lớn. Tệ hơn nữa, những tác vụ đòi hỏi tính toán sâu như xử lý ảnh, voice, hay video, hoặc việc nhúng thư viện xử lý của bên thứ 3 (được làm từ C chẳng hạn) vào hầu như vô vọng với HTML5.

Theo ông Nguyễn Hữu Bình, CEO&Founder của Applancer –  “Dĩ nhiên, công nghệ HTML 5 này vẫn có chỗ đứng quan trọng trong những ứng dụng nội bộ của doanh nghiệp vốn không đòi hỏi quá nhiều về mặt trải nghiệm và đặc biệt là trong những ứng dụng mang tính chất tính toán logic nhiều. Ví dụ như những ứng dụng quản lý hàng tồn kho, kế toán, tài chính… có các công thức tính toán phức tạp không cho phép sự sai sót về mặt số liệu và đòi hỏi sự đồng nhất trên các nền tảng thì tốt hơn hết bạn hãy dùng HTML5 để không phải chịu rủi ro khi triển khai do sai số liệu lên gấp nhiều lần trên các nền tảng”

Cross Platform(Titanium Appcelerator, Xamarin…)

cross-platform-dev-image

Các Cross platform hiện đại hơn như Titanium, Xamarin có ưu điểm rất lớn là có thể  lập trình ứng dụng bằng các ngôn ngữ quen thuộc như Javascript, C#. Chúng sẽ gọi các hàm của Native để hiển thị giao diện nên về mặt hiệu suất và độ mượt của ứng dụng được cải thiện đáng kể hơn so với HTML5. Nó khắc phục hầu hết các khuyết điểm của HTML5 về độ giật và sự chân thực trong việc hiển thị các thành phần trong giao diện như các nút, bar, view và các control của hệ điều hành. Thêm vào đó, việc truy cập các phần cứng như camera, GPS, tích hợp social đều dễ dàng. Các ứng dụng được build từ các nền tảng này thực sự là một native app.

Về mặt lý thuyết, chúng cũng chạy tốt trên đa nền tảng bao gồm Android, iOS, BB. Tuy nhiên, do phải hỗ trợ cùng lúc nhiều hệ điều hành nên mức độ hoàn thiện còn chưa cao, và phải gọi các hàm hiển thị giao diện (API) của Native nên các app được xây dựng từ các nền tảng Cross platform này vẫn không thể mượt bằng các ứng dụng Native và vì thế tối đa chỉ đạt khoảng 90%. Đặc biệt trong những màn hình có nhiều đối tượng hiển thị như table view, list view sẽ dẫn đến việc bị giật trong những thao tác vuốt nhanh. Nếu ứng dụng của bạn muốn có những hiệu ứng bắt mắt thì vấn đề sẽ trở nên nghiêm trọng hơn và càng sẽ sẽ phức tạp hơn rất nhiều so với thực hiện bằng Native app hoặc HTML5.

Vấn đề lớn nhất chính là sự khác nhau về giao diện giữa các hệ điều hành vì về mặt lý thuyết bạn vẫn có thể viết 1 lần và chạy nhiều nền tảng. Tuy nhiên điều đó chỉ đúng khoảng 70%, 30% còn lại bạn vẫn phải bỏ thời gian tinh chỉnh cho từng hệ điều hành riêng biệt và đôi khi 30% khối lượng công việc đó sẽ là rất lâu so với 70% kia.

cross-platform-multipeer-connectivity-mac-yosemite

Ngoài ra, việc nhúng các thư viện của bên thứ 3 vào giờ đây đã trở nên khả thi. Tuy nhiên việc nhúng chúng vào cũng cần các thao tác và kiến thức chuyên sâu về Native để tạo nên các plugin và cần được tiến hành trên mỗi nền tảng riêng biệt nên đây vẫn là cơn ác mộng đối với các lập trình viên.

Vậy khi nào dùng Cross Platform?

Tương tự như HTML5, bạn vẫn nên dùng công nghệ này khi ứng dụng của bạn sử dụng nội bộ, có mức độ tính toán logic tin cao, muốn đồng nhất và hạn chế sai sót số liệu, hoặc nếu có giao diện đơn giản tiện dụng, không có nhiều hiệu ứng và dữ liệu phức tạp thì chúng vẫn sẽ rất tốt khi phân phối trên chợ ứng dụng. Bạn sẽ tiết kiệm được rất nhiều thời gian và chi phí nếu muốn hỗ trợ nhiều nền tảng. Đây thực sự là một bước tiến lớn so với HTML5.

Vậy còn Swift?

Theo góc nhìn của một người chuyên làm công tác đào tạo từ một trung tâm chuyên giảng dạy lập trình ứng dụng di động nổi tiếng tại Việt Nam, ông Trinh Minh Cường, CEO của TechMaster – “Swift là ngôn ngữ phổ biến thứ 22 trên thế giới, bước tiến quá nhanh, có thể là nhanh nhất trong lịch sử các ngôn ngữ lập trình. Nó có cái REPL (read evaluation print loop) không khác gì Ruby, Python. Nó cũng không khác Objective-C vì gọi được thư viện C/C++, Objective-C thoải mái, nhưng ngôn ngữ nó dễ học hơn Objective-C. Lập trình viên làm việc với Swift rồi chuyển sang code Objective-C chỉ mất khoảng 3-4 ngày để làm quen. Còn ngược lại từ Objective-C sang Swift thì sẽ mất khoảng 5-10 ngày để thích nghi. Swift ấn tượng hơn Objective-C do có nhiều tính năng hơn và những gì Objective-C làm được Swift cũng làm được.”

swift-logo

Theo góc nhìn của một đơn vị chuyên làm sản phẩm, ông Hiếu Trần, vốn là Co-Founder & Bussiness Lead của Not A Basement, nơi cho ra đời các ứng dụng hot như Fuzel, Manga Rock – “Tôi nghĩ hiện nay Swift còn quá mới nên đối với các bạn lập trình viên lâu năm đã đầu tư thời gian nghiên cứu nhiều vào objective-C/C/C++ thì họ sẽ chưa sử dụng nhiều. Còn đối với các bạn mới tập lập trình thì đây có thể là một ngôn ngữ tốt để nắm bắt, nhất là đối với những ai muốn tìm hiểu lập trình iOS.”

Theo Applancer

Xem bài viết gốc tại đây.