Cuộc tranh luận về ứng dụng di động
Giới thiệu
Ứng dụng di động và HTML5 là hai công nghệ phổ biến nhất hiện nay và có nhiều điểm trùng lặp. Ứ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 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 như một 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 chính đáng để chuyển sang ứ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 so với web.
Độ phong phú của tính năng
Đ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 của thiết bị di động thành 2 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, sự kiện đa chạm cho những nền tảng hỗ trợ sự kiện này. Chúng thường có thể hoạt động khi người dùng nhấn các phím cứng, chẳng hạn như nút tìm kiếm và nút điều chỉnh âm lượng của Android. Chúng cũng có thể truy cập vào phần cứng, chẳng hạn như GPS và camera. Với sự cho phép của người dùng, một số nền tảng 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 này không chỉ có trong ứng dụng. Một hệ điều hành như Android cung cấp nhiều cách để các ứng dụng tương tác với người dùng và thực tế là 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 xuất hiện trên thanh trạng thái của thiết bị. Và bạn có các ý định, cho phép ứng dụng của bạn tự thông báo là đang cung cấp một dịch vụ chung mà các ứng dụng khác có thể thỉnh thoảng yêu cầu.
Quan điểm phản bác: Các tính năng gốc có thể được tăng cường và web dù sao cũng đang bắt kịp
Đúng là nhiều tính năng trong ứng dụng đơn giản là nằm ngoài tầm với của một ứng dụng HTML5. Bất kể kỹ năng web-fu của bạn có tốt đến đâu, nếu ứng dụng của bạn bị mắc kẹt trong một hộp cát không có API camera, thì ứng dụng đó sẽ không chụp ảnh nhanh trong thời gian tới! 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 chụp ảnh, bạn có thể tạo một ứng dụng gốc có một khung hiển thị 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 mã 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à khung hiển thị web gọi bằng API mạng tiêu chuẩn. Khi tạo 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 cộng với 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, chứ không phải các trang web truyền thống được truy cập từ trình duyệt di động. Nhưng có lẽ bạn sẽ không cần đến nó trong thời gian dài. 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 tốc độ này. Bộ nhớ ngoại tuyến, định vị vị trí, đồ hoạ canvas và tính năng 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, chẳng hạn như vậy. Ngay cả camera 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. Ngoài ra, trình duyệt iOS mới nhất hỗ trợ WebSocket để phát trực tiếp 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. Nhưng web cũng đang phát triển rất nhanh. Chỉ riêng 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 phát triển các tiêu chuẩn và thêm các tính năng với tốc độ cực nhanh. 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 các trình duyệt di động.
Ứng dụng gốc là một mục tiêu di động, nhưng web đang thu hẹp khoảng cách này.
Hiệu suất
Điểm: Native chạy nhanh hơn
Các ứng dụng gốc không phải đối mặt với rào cản thời gian chạy web. Chúng chạy gần với phần cứng và có thể tận dụng các yếu tố tăng hiệu suất như tính năng tăng tốc GPU và đa luồng.
Quan điểm phản bác: Ngày nay, thời gian chạy web nhanh hơn nhiều và hầu hết các ứng dụng đều không cần tốc độ
Nói rằng web đã tải nhanh hơn trong những năm gần đây thì vẫn 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 chỉ hoạt động nhanh hơn:
Công cụ kết xuất đồ hoạ cũng đã tăng tốc web và giờ đây, quá trình tăng tốc phần cứng đang bắt đầu diễn ra. Hãy xem xét sự cải thiện tốc độ do canvas được tăng tốc phần cứng mang lại:
Ngoài ra, Web Workers API mới giúp bạn có thể sử dụng nhiều luồng, đồng thời 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 hoạt động trên 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 chú ý nhiều hơn đến thiết bị di động, ví dụ: chuyên gia về hiệu suất Steve Souders có một trang dành riêng cho các công cụ nâng cao hiệu suất trên thiết bị di động.
Chưa phải tiến bộ nào trên máy tính cũng xuất hiện trên mọi nền tảng di động, nhưng xu hướng cho thấy những tiến bộ đó đang trên đường đến với các nền tảng di động. Bạn 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à chủ yếu dựa trên thông tin: tin tức, Thư, lịch trình, mạng xã hội, v.v. Hãy truy cập một vài địa điểm trên thiết bị di động của bạn, chẳng hạn như Gmail, Amazon, Twitter, và bạn có thể xác nhận rằng hiệu suất của web dành cho thiết bị di động là quá đủ. Đối với trò chơi, các 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. Cho đến khi WebGL được sử dụng rộng rãi, sẽ có một nhóm các khung ngày càng phát triển, biên dịch các ứng dụng WebGL thành các ứng dụng gốc có thể tận dụng OpenGL, ví dụ: ImpactJS.
Trải nghiệm của nhà phát triển
Điểm: Dễ phát triển ứng dụng gốc 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 là hiệu quả. Các API này đượ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 trên máy tính mô phỏng gần giống với thiết bị mục tiêu.
Điều khiến quá trình phát triển web trở nên đặc biệt khó khăn là sự đa dạng lớn 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ẽ có sẵn. 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.
Quan điểm phản bác: Web thường dễ phát triển hơn, đặc biệt là nếu nhắm đến nhiều thiết bị
Trước tiên, hãy giải quyết vấn đề 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 chúng đã chứng minh được khả năng vượt xa những gì người ta tưởng tượng – các nhà phát triển web đã học được cách tận dụng những điểm tốt và kiểm soát những điểm xấu, với các mẫu hiện được hiểu là có thể mở rộng thiết kế. Hơn nữa, các tiêu chuẩn này không ngừng phát triể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à vấn đề tranh luận về tôn giáo, đồng thời cũng phụ thuộc vào cơ sở mã cũ của bạn. Nhưng chắc chắn chúng ta có thể coi JavaScript là một đối thủ đáng gờm trong những ngày này.
Mặt khác của việc phân mảnh trình duyệt/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. Phát triển một ứng dụng Android bằng Java và bạn phải đối mặt với một cổng đầy đủ sang Objective C để hỗ trợ iOS. Phát triển một ứng dụng web một lần và ứng dụng đó sẽ chạy trên Android và iOS, chưa kể đến WebOS, BlackBerry, Windows Mobile và… à thì, đó là lý thuyết. Trên thực tế, bạn sẽ cần điều chỉnh mọi thứ cho từng nền tảng nếu thực sự muốn có trải nghiệm phù hợp. Nhưng bạn cũng sẽ 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à nhiều thiết bị.
Tin vui là "phân mảnh" luôn là cách này trên web và có những kỹ thuật nổi tiếng để đối phó với nó. Quan trọng nhất là nguyên tắc cải tiến tăng dần thúc giục các nhà phát triển nhắm đến một thiết bị cơ bản trước tiên và thêm các lớp tuyệt vời dành riêng cho nền tảng khi có thể. Phương châm phát hiện tính năng cũng giúp ích và ngày nay, chúng ta có sự hỗ trợ của thư viện từ những thư viện như Modernizr để hỗ trợ thiết kế web thích ứng. Khi sử dụng những kỹ thuật này một cách hợp lý, 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ả những "điện thoại cơ bản" đời cũ, thậm chí cả những kiểu dáng như đồng hồ và TV, bất kể thương hiệu 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 I/O 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 và TV) bằng một cơ sở mã chung gồm logic và mã đánh dấu.
Giao diện
Điểm: Nền tảng gốc phù hợp với giao diện người dùng
Một trong những đặc điểm xác định của mọi nền tảng là giao diện và trải nghiệm người dùng. Người dùng mong muốn các chế độ kiểm soát đượ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 giữa các nền tảng, ví dụ: điều gì sẽ 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ữ tiêu chuẩn cho những việc như vậy và bạn không thể đáp ứng tất cả các nền tảng bằng một ứng dụng HTML5 duy nhất.
Hơn nữa, giao diện và cảm nhậ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. Các tiện ích của thư viện này gói gọn loại giao diện và cảm nhận mà người dùng mong đợi. Bạn sẽ có được nhiều giao diện dự kiến "miễn phí" chỉ bằng cách sử dụng bộ công cụ gốc.
Quan điểm 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 đó tăng cường dần phiên bản đó. Mặc dù việc nâng cao thường dựa trên các tính năng, nhưng bạn cũng có thể nâng cao 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à do 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à sẵn sàng nỗ lực hơn nữa để cạnh tranh với các lựa chọn thay thế gốc, thì đây có thể là cách phù hợp.
Đố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 độ tính nhất quán cao hơn với trải nghiệm duyệt web trên máy tính, cũng như trên những thiết bị khác mà người dùng có thể đang sử dụng. Hơn nữa, có rất nhiều ứng dụng thành công không hỗ trợ nhiều giao diện và cảm giác tự nhiên. Điều này chắc chắn đúng với các trò chơi (trò chơi di động mà bạn yêu thích có tuân theo giao diện người dùng 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 mà bạn chọn, bạn sẽ thấy nhiều cơ chế giao diện người dùng đang hoạt động.
Tiềm năng khám phá
Điểm: Dễ dàng khám phá các ứng dụng gốc
Các cơ chế phân phối ứng dụng, chẳng hạn như Market của Android và App Store của Apple, đã trở nên vô cùng phổ biến trong những năm gần đây và là động lực chính cho toàn bộ ngành thiết bị di động. Mọi nhà phát triển đều có thể gửi ứng dụng gốc của mình lên trang web thương mại này. Tại đây, người dùng có thể khám phá ứng dụng thông qua nhiều cách kết hợp như duyệt xem, tìm kiếm và nhận đề xuất. Không chỉ vậy, nếu bạn đã làm đúng cách, thì những điểm xếp hạng và bình luận 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.
Quan điểm phản bác: Thực tế là các ứng dụng web dễ khám phá hơn
Web có lẽ 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ề lý thuyết) một giá trị nhận dạng duy nhất cho mọi thứ 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ác 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ư các trang web thương mại dành cho thiết bị 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è chỉ 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 trong tin nhắn SMS. Khi đó, người dùng thiết bị di động có thể nhấp vào đường liên kết và khởi chạy ứng dụng trong trình duyệt trên thiết bị của họ.
Chúng tôi chưa có các trang web thương mại tương tự nơi người dùng có thể đánh giá và bình luận về ứng dụng, nhưng điều này 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
"Cậu bé 6 tuổi tạo ứng dụng trong giờ ăn trưa, bán được vô số bản sao với giá 3 USD mỗi bản". Ngày nay, bạn thấy tiêu đề đó rất nhiều, vì vậy, không có gì lạ khi các nhà phát triển lớn và nhỏ đều đang tìm đến các trang web thương mại dành cho thiết bị di động để kiếm tiền. Các nền tảng di động cung cấp nhiều 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 mãi mãi. Ngoài ra, một số nền tảng còn cung cấp cơ chế thanh toán và đăng ký trong ứng dụng, đồng thời các cơ chế này được tích hợp chặt chẽ trong một cơ chế nhất quán và an toàn. Những hình thức thanh toán mới này giúp nhà phát triển chuyển đổi một ứng dụng thành công rực rỡ thành một nguồn doanh thu lâu dài.
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à hoạt động tài trợ.
Quan điểm phản bác: Bạn luôn có thể kiếm tiền trên web và cơ hội đang ngày càng tăng
Web sẽ không phải là động lự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ác cơ chế "trả tiền theo mức sử dụng" trực tiếp chưa phát triển mạnh mẽ, nhưng có nhiều thị trường ngách nơi 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ụ: Google Apps, 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. Ngoài ra, thanh toán trực tiếp không phải là cách duy nhất để kiếm lợi nhuận từ các ứng dụng web. Có quảng cáo trực tuyến, đường liên kết tiếp thị liên kết, nội dung được tài trợ, quảng bá chéo cho các sản phẩm và dịch vụ khác.
Tuy nhiên, việc một nhà phát triển web đọc các tiêu đề và cảm thấy hơi ghen tị với những người khác là điều hoàn toàn hợp lý. Bạn không thể gửi URL trang web đến các trang web thương mại gốc, vậy nhà phát triển web phải làm gì? Bạn sẽ tạo một "ứng dụng bao bọc" gốc – đối với 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 khung hiển thị web. Khung hiển thị web là nơi bạn nhúng ứng dụng thực. Sau đó, bạn chỉ cần gửi các ứng dụng này đến nhiều trang web thương mại (và hy vọng sẽ kiếm được tiền!). Có lẽ có hàng trăm, nếu không phải hàng nghìn ứng dụng dựa trên web trong các trang web thương mại chính hiện nay, một số ứng dụng trong số đó được đồng hoá một cách khéo léo đến mức chúng ta thậm chí không biết gì về ứng dụng web của chúng.
Nhược điểm là bạn phải chịu trách nhiệm 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 có các dịch vụ web như PhoneGap Build và Apparatio đang được phát triển. 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 để tạo 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.
Các trang web thương mại có hỗ trợ trực tiếp ứng dụng web mà không cần phải bao bọc chúng một cách tự nhiên không? Vẫn chưa rõ. Chúng tôi 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à nói 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 về 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 tốt nếu chúng ta có thể tuyên bố một phiên bản chiến thắng ở đây, nhưng hiện tại, không có phiên bản nào vượt trội rõ ràng. Một số ứng dụng phù hợp nhất với ứng dụng gốc và một số ứng dụng phù hợp nhất với web. Ngăn xếp web có thể 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 có thời điểm công nghệ web là một yếu tố quan trọng trên phần lớn các hệ điều hành di động, nếu khô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. Đây có thể là giải pháp thoả hiệp 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 vô số thiết bị và hệ điều hành hiện có. Cho 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à bạn (nhà phát triển) có thể hưởng lợi từ tất cả các thông tin trước đây.