Cuộc tranh luận về ứng dụng di động
Giới thiệu
Ứng dụng di động và HTML5 là hai trong số những công nghệ phổ biến nhất hiện nay và có nhiều điểm tương đồng. Ứng dụng web chạy trong trình duyệt di động và cũng có thể được đóng gói lại dưới dạng ứng dụng gốc trên nhiều nền tảng di động. Với nhiều nền tảng cần hỗ trợ, kết hợp với sức mạnh tuyệt đối của trình duyệt di động, các nhà phát triển đang chuyển sang HTML5 dưới dạng giải pháp "viết một lần, chạy nhiều lần". Nhưng liệu điều này có thực sự khả thi? Vẫn có những lý do thuyết phục để phát triển ứng dụng gốc và rõ ràng là nhiều nhà phát triển đang đi theo hướng đó. Bài viết này là một cuộc tranh luận về ứng dụng gốc và ứng dụng web.
Tính năng phong phú
Điểm: Quảng cáo gốc có thể làm được nhiều việc hơn
Chúng ta có thể chia chức năng di động thành hai khía cạnh: trải nghiệm của chính ứng dụng và cách ứng dụng kết nối với hệ sinh thái của thiết bị, ví dụ: đối với Android, đây sẽ là các tính năng như tiện ích và thông báo. Quảng cáo gốc vượt trội ở cả hai phương diện.
Về trải nghiệm ứng dụng, ứng dụng gốc có thể làm được nhiều việc hơn. Họ có thể dễ dàng nắm bắt các sự kiện vuốt, thậm chí là đa chạm, đối với những nền tảng hỗ trợ tính năng này. Các phím này thường có thể hoạt động khi bạn nhấn phím cứng, chẳng hạn như nút tìm kiếm và nút điều khiển âm lượng của Android. Các ứng dụng này cũng có thể truy cập vào phần cứng, chẳng hạn như GPS và camera. Ngoài ra, khi được người dùng cho phép, một số nền tảng sẽ cung cấp quyền truy cập không hạn chế vào hệ điều hành. Hãy thử phát hiện lượng pin còn lại bằng HTML5!
Tuy nhiên, trải nghiệm trong ứng dụng không phải là tất cả. Một hệ điều hành như Android cung cấp nhiều cách để ứng dụng tương tác với người dùng và cả với các ứng dụng khác. Bạn có các tiện ích đang hoạt động trên trang chủ. Bạn có thông báo, thông báo này sẽ xuất hiện trên thanh trạng thái của thiết bị. Và bạn có ý định, cho phép ứng dụng của bạn tự thông báo là cung cấp một dịch vụ chung mà các ứng dụng khác có thể yêu cầu vào một số thời điểm.
Quan điểm phản bác: Các tính năng gốc có thể được tăng cường và dù sao thì web cũng đang bắt kịp
Đúng là nhiều tính năng trong ứng dụng nằm ngoài tầm với của ứng dụng HTML5. Cho dù kỹ năng web-fu của bạn có tốt đến đâu, nếu ứng dụng của bạn bị kẹt trong hộp cát không có API máy ảnh, thì ứng dụng đó sẽ không sớm chụp nhanh được! May mắn là bạn không cần phải ở trong hộp cát đó. Nếu thực sự cần ứng dụng web của mình chụp ảnh, bạn có thể tạo một ứng dụng gốc, một ứng dụng có chế độ xem web được nhúng cung cấp phần lớn giao diện người dùng. Đây là cách hoạt động của khung PhoneGap nguồn mở: khung này lấp đầy khoảng trống bằng cách hiển thị các tính năng gốc dưới dạng dịch vụ web mà chế độ xem web gọi bằng API mạng tiêu chuẩn. Khi xây dựng một ứng dụng kết hợp như thế này, bạn cũng có thể kết nối với các tính năng của nền tảng như tiện ích, thông báo và ý định.
Việc tạo một ứng dụng kết hợp (gốc và web) không phải là một giải pháp lý tưởng. Điều này làm tăng độ phức tạp và chỉ áp dụng cho các ứng dụng web được gói dưới dạng ứng dụng gốc, thay vì các trang web truyền thống được truy cập từ trình duyệt di động. Nhưng có thể bạn sẽ không cần đến tính năng này lâu nữa. Các tiêu chuẩn web đang phát triển nhanh chóng và các trình duyệt di động hiện đại cũng đang bắt kịp xu hướng này. Ví dụ: bộ nhớ ngoại tuyến, vị trí địa lý, đồ hoạ canvas và phát video/âm thanh đều được hỗ trợ rộng rãi trên các điện thoại thông minh hiện đại. Ngay cả máy ảnh cũng bắt đầu được hỗ trợ – kể từ Android 3.1, bạn có thể chụp ảnh và quay video bằng các tiêu chuẩn web. Và trình duyệt iOS mới nhất hỗ trợ WebSocket để truyền trực tuyến 2 chiều, cũng như phát hiện hướng thiết bị.
Nhìn chung, thiết bị di động đang phát triển. Tuy nhiên, web cũng đang phát triển và phát triển nhanh chóng. Chỉ riêng trong số các trình duyệt dành cho máy tính, có 5 nhà cung cấp trình duyệt lớn đang phát triển các tiêu chuẩn và bổ sung tính năng với tốc độ nhanh như chớp. Mặc dù việc chuyển các tính năng này sang thiết bị di động không phải là một quy trình đơn giản, nhưng nhiều tính năng trong số đó đã được đưa vào trình duyệt di động.
Ứng dụng gốc là một mục tiêu phát triển nhanh chóng, nhưng web đang thu hẹp khoảng cách.
Hiệu suất
Điểm: Mã gốc chạy nhanh hơn
Ứng dụng gốc không có rào cản về thời gian chạy web cần xử lý. Các ứng dụng này chạy gần với phần cứng và có thể tận dụng các trình tăng hiệu suất như tăng tốc GPU và đa luồng.
Ý kiến phản bác: Môi trường thời gian chạy web ngày nay nhanh hơn nhiều và hầu hết ứng dụng đều không cần đến tốc độ đó
Nói rằng web đã trở nên nhanh hơn trong những năm gần đây là chưa đủ. V8, công cụ JavaScript đi kèm với Chrome, là một bước phát triển lớn về hiệu suất web khi ra mắt và kể từ đó, công cụ này ngày càng nhanh hơn:
Công cụ kết xuất đồ hoạ cũng giúp tăng tốc web và hiện tại, quá trình tăng tốc phần cứng đang bắt đầu diễn ra. Hãy xem tốc độ tăng lên nhờ canvas được tăng tốc phần cứng:
Ngoài ra, API Web Workers mới giúp bạn có thể đa luồng và các nhà phát triển web hiện đại cũng có thể gọi một loạt thư viện được tối ưu hoá hiệu suất và các kỹ thuật tối ưu hoá hiệu suất được nghiên cứu kỹ lưỡng. Mặc dù hầu hết các công cụ này đều bắt đầu từ web dành cho máy tính, nhưng chúng vẫn phù hợp với thiết bị di động và ngày càng có nhiều sự chú ý dành cho thiết bị di động, ví dụ: chuyên gia về hiệu suất Steve Souders có trang dành riêng cho các công cụ hiệu suất dành cho thiết bị di động.
Không phải tất cả các tiến bộ trên máy tính đều đã được áp dụng cho mọi nền tảng di động, nhưng các xu hướng cho thấy chúng đang được áp dụng. Cũng cần lưu ý rằng phần lớn ứng dụng di động không phải là trò chơi 3D tiên tiến, mà về cơ bản là dựa trên thông tin: tin tức, thư, thời gian biểu, mạng xã hội, v.v. Hãy truy cập vào một vài trang web trên thiết bị di động của bạn, ví dụ: GMail, Amazon, Twitter và bạn có thể xác nhận hiệu suất web dành cho thiết bị di động là quá đủ. Đối với trò chơi, những trò chơi cơ bản đã có thể thực hiện được bằng canvas 2D và WebGL đang bắt đầu xuất hiện trên thiết bị di động – hãy xem Firefox 4. Trong khi chờ đợi, ngày càng có nhiều khung biên dịch ứng dụng WebGL thành ứng dụng gốc có thể tận dụng OpenGL, chẳng hạn như ImpactJS.
Trải nghiệm của nhà phát triển
Quan điểm: Phát triển ứng dụng gốc dễ dàng hơn
Ứng dụng gốc sử dụng các ngôn ngữ lập trình mạnh mẽ (ví dụ: Java, Objective C, C++) được thiết kế để phát triển ứng dụng phức tạp và đã được chứng minh hiệu quả. Các API được thiết kế từ đầu để hỗ trợ nền tảng hiện tại. Bạn có thể dễ dàng gỡ lỗi ứng dụng trong trình mô phỏng máy tính, giúp thể hiện gần đúng thiết bị mục tiêu.
Điều khiến việc phát triển web trở nên đặc biệt rắc rối là sự đa dạng của các trình duyệt và thời gian chạy. Khi ứng dụng của bạn chạy, không có gì đảm bảo tính năng X sẽ hoạt động. Và ngay cả khi có, trình duyệt sẽ triển khai như thế nào? Các tiêu chuẩn có thể được diễn giải theo nhiều cách.
Ý kiến phản bác: Web thường dễ phát triển hơn, đặc biệt là khi nhắm đến nhiều thiết bị
Trước tiên, hãy cùng tìm hiểu về công nghệ cốt lõi. Đúng là các tiêu chuẩn web ban đầu được hình thành trong thời đại mà web về cơ bản là về tài liệu, chứ không phải ứng dụng, với JavaScript được xây dựng và triển khai chỉ trong 10 ngày! Nhưng hoá ra chúng có nhiều khả năng hơn tưởng tượng – các nhà phát triển web đã học cách tận dụng những phần tốt và khắc phục những phần xấu, với các mẫu hiện đã được hiểu rõ để thiết kế có thể mở rộng. Hơn nữa, các tiêu chuẩn không đứng yên và những nỗ lực như HTML5, CSS3 và EcmaScript Harmony đều đang cải thiện trải nghiệm của nhà phát triển. Việc bạn thích C++, Java hay JavaScript là một vấn đề gây tranh cãi và cũng phụ thuộc vào toàn bộ mã nguồn cũ của bạn. Nhưng chúng ta chắc chắn có thể coi JavaScript là một đối thủ đáng gờm hiện nay.
Mặt trái của sự phân mảnh trình duyệt/môi trường thời gian chạy là thực tế rằng tất cả các môi trường này đều tồn tại ngay từ đầu. Nếu phát triển một ứng dụng Android bằng Java, bạn sẽ phải chuyển toàn bộ sang Objective C để hỗ trợ iOS. Chỉ cần phát triển một ứng dụng web là bạn có thể chạy ứng dụng đó trên Android và iOS, chưa kể đến WebOS, BlackBerry, Windows Mobile và… nói chung là về mặt lý thuyết thì như vậy. Trên thực tế, bạn cần điều chỉnh mọi thứ cho từng nền tảng nếu thực sự muốn có được trải nghiệm phù hợp. Nhưng bạn cũng phải làm điều đó trong ứng dụng gốc, đối với hầu hết các hệ điều hành di động – có nhiều phiên bản và thiết bị khác nhau.
Tin vui là "sự phân mảnh" luôn diễn ra theo cách này trên web và có những kỹ thuật nổi tiếng để xử lý vấn đề này. Quan trọng nhất là nguyên tắc cải tiến tăng dần khuyến khích nhà phát triển nhắm đến một thiết bị cơ bản trước, sau đó thêm các lớp tính năng tuyệt vời dành riêng cho nền tảng nếu có. Nguyên tắc phát hiện tính năng cũng giúp ích và hiện nay, chúng ta có thư viện hỗ trợ từ những thư viện như Modernizr để hỗ trợ thiết kế web đáp ứng. Bằng cách sử dụng hợp lý các kỹ thuật này, bạn có thể mở rộng phạm vi tiếp cận đến phần lớn các thiết bị, ngay cả "điện thoại phổ thông" kiểu cũ, thậm chí cả các kiểu dáng như đồng hồ và TV, bất kể kiểu dáng và hệ điều hành. Hãy xem bản minh hoạ đa giao diện người dùng của chúng tôi tại Google IO 2011, nơi chúng tôi nhắm đến các kiểu dáng riêng biệt (điện thoại phổ thông, điện thoại thông minh, máy tính bảng, máy tính, TV) bằng một toàn bộ mã nguồn logic và mã đánh dấu chung.
Giao diện
Điểm: Quảng cáo gốc phù hợp với giao diện của nền tảng
Một trong những tính năng xác định của bất kỳ nền tảng nào là giao diện của nền tảng đó. Người dùng mong đợi các chế độ điều khiển được trình bày nhất quán và được thao tác theo cùng một cách. Có một số thành ngữ khác nhau tuỳ theo nền tảng, ví dụ: điều gì xảy ra khi người dùng thực hiện thao tác "giữ lâu" (tiếp tục chạm vào một phần tử trong vài giây)? Các nền tảng có thành ngữ chuẩn cho những điều như vậy và bạn không thể đáp ứng tất cả bằng một ứng dụng HTML5 duy nhất.
Hơn nữa, giao diện của nền tảng được điều phối bởi thư viện phần mềm gốc của nền tảng, trong đó các tiện ích đóng gói loại giao diện mà người dùng mong đợi. Bạn sẽ có được giao diện như mong đợi "miễn phí" chỉ bằng cách sử dụng bộ công cụ gốc.
Ý kiến phản bác: Web có giao diện riêng và bạn cũng có thể tuỳ chỉnh giao diện web cho những nền tảng mà bạn quan tâm nhất
Như đã giải thích trong phần trước, cách phát triển web là viết một phiên bản cơ bản "phù hợp với tất cả", sau đó dần dần cải tiến phiên bản đó. Mặc dù việc cải tiến thường dựa trên các tính năng, nhưng bạn cũng có thể cải tiến bằng cách nhắm đến những nền tảng mà bạn quan tâm nhất. Đây là một loại "phát hiện trình duyệt", đôi khi bị cộng đồng web phản đối, chủ yếu là vì có quá nhiều trình duyệt có thể có. Nhưng nếu bạn xem hai hoặc ba nền tảng có mức độ ưu tiên rất cao và bạn sẵn sàng nỗ lực hơn nữa để cạnh tranh với các giải pháp thay thế gốc, thì đây có thể là cách nên làm.
Đối với phiên bản cơ sở, web có giao diện riêng và chúng ta thậm chí có thể nói rằng mỗi nền tảng di động đều có "giao diện web" riêng do trình duyệt mặc định và thời gian chạy web thiết lập. “Giao diện web” có thể phù hợp với người dùng của bạn và trên thực tế, cho phép bạn đạt được mức độ nhất quán cao hơn với trải nghiệm duyệt web trên trình duyệt dành cho máy tính, cũng như trên các thiết bị khác mà người dùng có thể đang làm việc. Hơn nữa, có nhiều ứng dụng thành công không hỗ trợ nhiều giao diện gốc. Điều này chắc chắn đúng với trò chơi (trò chơi di động yêu thích của bạn có tuân theo giao diện của hệ điều hành di động không?) và thậm chí đúng với các ứng dụng thông thường hơn, ví dụ: hãy xem các ứng dụng Twitter gốc phổ biến hơn trên nền tảng bạn chọn và bạn sẽ thấy nhiều cơ chế giao diện người dùng đang hoạt động.
Tiềm năng được khám phá
Luận điểm: Ứng dụng gốc dễ khám phá hơn
Các cơ chế phân phối ứng dụng, như Android Market và App Store của Apple, đã trở nên cực kỳ phổ biến trong những năm gần đây và là động lực chính cho toàn bộ ngành di động. Bất kỳ nhà phát triển nào cũng có thể gửi ứng dụng gốc của họ đến thị trường, nơi người dùng có thể khám phá ứng dụng đó thông qua việc kết hợp duyệt xem, tìm kiếm và nhận đề xuất. Không chỉ vậy, nếu bạn đã làm đúng, thì điểm xếp hạng và nhận xét tích cực sẽ thuyết phục người dùng nhấn vào nút cài đặt quan trọng.
Ý kiến phản bác: Trên thực tế, ứng dụng web dễ khám phá hơn
Web được cho là phương tiện dễ khám phá nhất từng được tạo ra. Trong URL đơn giản, chúng ta có (ít nhất là về mặt lý thuyết) một giá trị nhận dạng riêng biệt cho mọi nội dung từng được xuất bản trên web, bao gồm cả mọi ứng dụng được xuất bản trên các trang web tiêu chuẩn. Công cụ tìm kiếm giúp bạn dễ dàng khám phá nội dung đó và các trang web khác có thể liên kết đến nội dung đó, bao gồm cả danh mục ứng dụng web tương tự như thị trường di động. Thật vậy, bất kỳ cá nhân nào cũng có thể chia sẻ ứng dụng web với bạn bè của họ bằng cách liên kết đến ứng dụng đó trong email và tin nhắn trên mạng xã hội. Bạn cũng có thể gửi đường liên kết qua tin nhắn SMS, trong đó người dùng thiết bị di động có thể nhấp vào đường liên kết và chạy ứng dụng trong trình duyệt của thiết bị.
Chúng tôi chưa có các thị trường tương tự, nơi người dùng có thể xếp hạng và nhận xét về ứng dụng, nhưng điều đó cũng đang thay đổi. Đọc tiếp…
Kiếm tiền
Điểm: Quảng cáo gốc có thể kiếm tiền
"Đứa trẻ 6 tuổi tạo ứng dụng trong giờ ăn trưa, bán được hàng triệu bản với giá 3 đô la mỗi bản". Bạn thấy tiêu đề đó rất nhiều trong những ngày này, vì vậy không có gì ngạc nhiên khi các nhà phát triển lớn và nhỏ đang tìm kiếm thị trường di động để kiếm tiền. Nền tảng di động cung cấp một số cách để nhà phát triển trực tiếp tính phí cho ứng dụng của họ. Đơn giản nhất là thanh toán một lần để mở khoá ứng dụng vĩnh viễn. Một số nền tảng cũng cung cấp cơ chế thanh toán trong ứng dụng và đăng ký, đồng thời được tích hợp chặt chẽ trong một cơ chế nhất quán, an toàn. Những phương thức thanh toán mới này cho phép nhà phát triển chuyển đổi một ứng dụng thành công thành một nguồn doanh thu dài hạn.
Ngoài các khoản thanh toán trong ứng dụng, bạn có thể kiếm tiền bằng các mô hình web truyền thống, chẳng hạn như quảng cáo và tài trợ.
Quan điểm phản bác: Việc kiếm tiền trên web luôn khả thi và cơ hội ngày càng tăng
Web sẽ không thể là động cơ của ngành công nghiệp hiện đại nếu không có nhiều cơ hội kiếm tiền. Mặc dù cơ chế "trả tiền theo mức sử dụng" trực tiếp chưa phát triển mạnh, nhưng có nhiều thị trường ngách mà các giải pháp "phần mềm dưới dạng dịch vụ" dựa trên gói thuê bao đã thực sự trở nên khả thi. Ví dụ: ứng dụng Google, các sản phẩm của 37Signals và phiên bản cao cấp của nhiều dịch vụ email. Hơn nữa, thanh toán trực tiếp không phải là cách duy nhất để kiếm lợi nhuận từ ứng dụng web. Có quảng cáo trực tuyến, đường dẫn tiếp thị liên kết, tài trợ, quảng cáo chéo cho các sản phẩm và dịch vụ khác.
Tuy nhiên, việc nhà phát triển web đọc các tiêu đề và cảm thấy ghen tị về việc thanh toán là điều hoàn toàn dễ hiểu. Bạn không thể gửi URL cho web đến các trang web gốc, vậy nhà phát triển web phải làm gì? Bạn cần tạo một "ứng dụng bao bọc" gốc – cho mỗi nền tảng mà bạn muốn nhắm đến, hãy tạo một ứng dụng gốc trống chỉ chứa một chế độ xem web. Chế độ xem web là nơi bạn nhúng ứng dụng thực tế. Sau đó, bạn chỉ cần gửi các ứng dụng này đến nhiều thị trường (và hy vọng tiền sẽ đổ về!). Có lẽ có hàng trăm, nếu không muốn nói là hàng nghìn ứng dụng chạy trên web trên các thị trường chính hiện nay, một số ứng dụng được đồng hoá một cách khéo léo đến mức chúng ta thậm chí không biết đó là ứng dụng web.
Nhược điểm là gánh nặng của việc biên dịch chéo cho từng nền tảng. Đây là lúc một khung hiện có như PhoneGap có thể giúp ích. Thậm chí còn tốt hơn, có các dịch vụ web như PhoneGap Build và Apparatio đang được phát triển. Hãy trỏ các trang web này đến kho lưu trữ mã của bạn, và một ứng dụng Android, một ứng dụng iOS, v.v. sẽ xuất hiện… sẵn sàng để bạn gửi đến các cửa hàng tương ứng. Không cần cài đặt SDK gốc trên máy; tất cả những gì bạn cần để xây dựng tất cả các ứng dụng gốc này là một trình soạn thảo mã và một trình duyệt web.
Liệu các trang web thương mại có hỗ trợ trực tiếp ứng dụng web mà không cần tất cả các chi phí bao bọc chúng theo cách gốc không? Hiện vẫn chưa rõ. Chúng ta biết rằng Google đã ra mắt Cửa hàng Chrome trực tuyến vào năm ngoái và mặc dù chỉ áp dụng cho máy tính, nhưng cửa hàng này đã thu hút sự quan tâm của các nhà cung cấp trình duyệt khác và nhìn chung là một phần của xu hướng hướng tới danh mục ứng dụng web, bao gồm cả một số nỗ lực dành riêng cho thiết bị di động. Khái niệm cửa hàng trực tuyến vẫn còn mới mẻ, nhưng có nhiều dấu hiệu đầy hứa hẹn.
Kết luận
Sẽ rất tuyệt nếu có thể tuyên bố một người chiến thắng ở đây, nhưng hiện tại, không có người chiến thắng rõ ràng. Một số ứng dụng phù hợp nhất với nền tảng gốc và một số ứng dụng phù hợp nhất với web. Ngăn xếp web được cho là có nhiều động lực hơn, nhưng về khả năng và chất lượng thực thi, các ứng dụng gốc cũng đang phát triển nhanh chóng. Và trừ phi đến lúc công nghệ web trở thành công dân hạng nhất trên phần lớn hệ điều hành di động, thì ứng dụng gốc sẽ luôn là một yếu tố quan trọng cần cân nhắc.
Một kỹ thuật được đề cập trong bài viết này là ứng dụng kết hợp, và đây có thể là giải pháp dung hoà tốt nhất cho một số nhà phát triển: chế độ xem web khi có thể và các thành phần gốc dành riêng cho nền tảng khi không thể.
Nếu bạn chọn đường dẫn web, hãy lưu ý đến các tiêu chuẩn web và nguyên tắc cải tiến tăng dần. Web là một công nghệ biết cách nhắm đến nhiều thiết bị và hệ điều hành xung quanh. Dù bạn chọn gọi là "phân mảnh" hay "đa dạng", thì web vẫn chấp nhận điều đó và các nhà phát triển có thể hưởng lợi từ tất cả các thông tin trước đây hiện có.