HTML5 so với Gốc

Cuộc tranh luận về ứng dụng dành cho thiết bị di động

Michael Mahemoff
Michael Mahemoff

Giới thiệu

Ứng dụng dành cho thiết bị di động và HTML5 là hai trong số những công nghệ phổ biến nhất hiện nay và có rất nhiều vấn đề trùng lặp. Các ứng dụng web chạy trong trình duyệt cho thiết bị 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 hỗ trợ, kết hợp với sức mạnh tuyệt vời của trình duyệt trên thiết bị 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, chạy nhiều". Nhưng nó có thực sự khả thi không? Vẫn có những lý do thuyết phục để chuyển sang sử dụng mô hình gốc và rõ ràng, nhiều nhà phát triển thực sự đang đi theo con đường đó. Bài viết này là cuộc tranh luận về quảng cáo gốc và web.

Mức độ phong phú của tính năng

Lưu ý: 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 chiều: trải nghiệm của bản thân ứ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, đó là các tính năng như tiện ích và thông báo). Ưu điểm gốc ở cả hai phương diện.

Về trải nghiệm ứng dụng, ứng dụng gốc có thể mang lại nhiều lợi ích hơn. Chúng có thể dễ dàng giữ lại các sự kiện vuốt, thậm chí là nhiều lần chạm, đối với các nền tảng hỗ trợ sự kiện này. Các nút này thường có thể hoạt động trên các phím cứng được nhấn, chẳng hạn như nút tìm kiếm và các nút điều khiển âm lượng của Android. Người dùng cũng có thể sử dụng phần cứng, chẳng hạn như GPS và máy ảnh. Và với sự cho phép của người dùng, một số nền tảng sẽ cung cấp quyền truy cập không bị hạn chế vào hệ điều hành. Chỉ cần thử phát hiện thời lượng pin còn lại với HTML5!

Tuy nhiên, nó còn hơn cả trải nghiệm trong ứng dụng. 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à với ứ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ị. Ngoài ra, bạn có các ý định cho phép ứng dụng của mình 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 đôi khi.

Điểm đối lập: Bạn có thể tăng cường các tính năng gốc và web vẫn bắt kịp xu hướng

Đúng là nhiều tính năng trong ứng dụng đơn giản là không thể tiếp cận được với một ứng dụng HTML5. Bất kể kỹ năng web-fu của bạn có thịnh hành đến mức nào, nếu ứng dụng của bạn bị kẹt trong một hộp cát không có API máy ảnh, thì ứng dụng đó sẽ không chụp được ảnh nhanh bất cứ lúc nào! May mắn là bạn không 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 ứ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 cách sử dụ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ể tận dụng 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 kết hợp giữa ứng dụng gốc và ứng dụng web không phải là giải pháp lý tưởng. Điều này làm tăng thêm sự phức tạp và chỉ áp dụng cho các ứng dụng web được bao bọc dưới dạng ứng dụng gốc, thay vì những trang web truyền thống truy cập qua trình duyệt cho thiết bị di động. Nhưng có thể bạn sẽ không cầ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 hiện đại dành cho thiết bị di động cũng theo kịp. Chẳng hạn, bộ nhớ ngoại tuyến, vị trí địa lý, đồ hoạ canvas và tính năng phát lại video/âm thanh đều được hỗ trợ rộng rãi trong số các smarpthone 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. Nhưng web cũng phát triển và nhanh chóng. 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 chính phát triển các tiêu chuẩn và bổ sung 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 chuyển sang trình duyệt cho thiết bị di động.

Quảng cáo gốc là một mục tiêu có tốc độ thay đổi nhanh chóng, nhưng web đang thu hẹp khoảng cách này.

Hiệu suất

Điểm: Quảng cáo gốc chạy nhanh hơn

Ứng dụng gốc không phải giải quyết rào cản thời gian chạy web. Các API này hoạt động gần sát kim loại và có thể tận dụng các tính năng tăng hiệu suất như tăng tốc GPU và khả năng đa luồng.

Bộ đối xứng: Thời gian chạy web hiện nay nhanh hơn nhiều và hầu hết ứng dụng đều không cần tốc độ như vậy

Tuy nhiên, nếu nói rằng web đã phát triển nhanh hơn trong những năm gần đây, thì sẽ là vậy. V8, công cụ JavaScript cài sẵn trên 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:

Biểu đồ hiệu suất V8

Các công cụ kết xuất đồ hoạ cũng giúp phát triển web và giờ đây, quá trình tăng tốc phần cứng đang bắt đầu xảy ra. Hãy cùng xem phần tăng tốc độ do canvas được tăng tốc phần cứng cung cấp:

Biểu đồ canvas được tăng tốc phần cứng

Ngoài ra, API Trình chạy web mới còn hỗ trợ hoạt động đ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 các thư viện được tối ưu hoá hiệu suất cũng như 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 những người bắt đầu cuộc sống trên web dành cho máy tính để bàn, chúng vẫn liên quan đến thiết bị di động và ngày càng có nhiều sự chú ý đến thiết bị di động, ví dụ: chuyên gia hiệu suất Steve Souders có trang dành riêng cho các công cụ hiệu suất trên thiết bị di động.

Không phải tất cả những tiến bộ trên máy tính để bàn đều đã ảnh hưởng đến mọi nền tảng di động, nhưng xu hướng cho thấy chúng đang trên đà phát triển. Cũng cần lưu ý rằng phần lớn ứng dụng dành cho thiết bị di động không phải là trò chơi 3D tân tiến, mà về cơ bản đều 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 một số trang web trên thiết bị di động, chẳng hạn như Gmail, Amazon, Twitter, và bạn có thể khẳng định rằng hiệu suất web của thiết bị di động là chưa đủ. Đối với trò chơi, các bản vẽ cơ bản đã có sẵn với canvas 2D và WebGL đang bắt đầu xuất hiện trên thiết bị di động – hãy xem phiên bản Firefox 4. Cho đến khi phổ biến rộng rãi, có một bộ khung ngày càng phát triển giúp 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

Lưu ý: Quảng cáo gốc dễ phát triển 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ó hồ sơ theo dõi đã được chứng minh. Các API này được thiết kế cơ bản để hỗ trợ nền tảng có sẵn. Bạn có thể dễ dàng gỡ lỗi ứng dụng trong trình mô phỏng máy tính để minh hoạ gần đúng thiết bị mục tiêu.

Điều khiến việc phát triển web đặc biệt rắc rối chính là sự đa dạng rất lớn về trình duyệt và thời gian chạy. Khi ứng dụng của bạn chạy, tính năng X sẽ không đảm bảo sẽ hoạt động. Và ngay cả khi có, trình duyệt sẽ triển khai nó như thế nào? Tiêu chuẩn có thể diễn giải.

Quan điểm đối lập: Web thường dễ phát triển hơn, đặc biệt là khi nhắm mục tiêu đế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à về cơ bản web là về tài liệu chứ không phải ứng dụng, với JavaScript được tạo và triển khai chỉ trong 10 ngày! Nhưng thực ra chúng có khả năng hơn nhiều so với tưởng tượng – các nhà phát triển web đã học được cách tận dụng những phần tốt và chế ngự phần xấu bằng các mẫu giờ đây đã được hiểu cho thiết kế có thể điều chỉnh theo tỷ lệ. Hơn nữa, các tiêu chuẩn vẫn chưa đứ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++ hay Java hay JavaScript là một vấn đề tranh luận về tôn giáo và cũng phụ thuộc vào cơ sở mã cũ của bạn. Nhưng ngày nay, chúng tôi chắc chắn có thể đưa JavaScript vào một đối thủ cạnh tranh nghiêm túc.

Nhược điểm của việc phân mảnh trình duyệt/thời gian chạy là thực tế là 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 sẽ thấy một cổng đầy đủ sang Objective C để hỗ trợ iOS. Phát triển ứng dụng web một lần và ứng dụng sẽ chạy trong Android và iOS, chưa kể đến WebOS, BlackBerry, Windows Mobile và... thì đó cũng là lý thuyết. Trong thực tế, bạn cần phải đ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 sẽ phải làm như vậy trong mã gốc, đối với hầu hết các hệ điều hành trên thiết bị di động – có các phiên bản khác nhau và các 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 phổ biến để xử lý vấn đề này. Quan trọng nhất, nguyên tắc về tính năng nâng cao nâng cao dần dần thúc đẩy nhà phát triển nhắm đến một thiết bị cơ bản trước rồi thêm các lớp tuyệt vời dành riêng cho nền tảng nếu có. Phương pháp phát hiện tính năng cũng hữu ích và ngày nay, chúng tôi có thư viện hỗ trợ từ những công ty như Thẻ hiện đại để hỗ trợ thiết kế web thích ứng. Khi 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 với phần lớn các thiết bị, thậm chí 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ể nhà sản xuất và hệ điều hành. Hãy xem bản minh hoạ nhiều giao diện người dùng của chúng tôi tại Google IO 2011, trong đó chúng tôi nhắm mục tiêu đến các hệ số hình 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 cơ sở mã chung của logic và mã đánh dấu.

Cảm quan

Lưu ý: 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 đặc điểm xác định của mọi nền tảng là giao diện. Người dùng mong muốn các tuỳ chọn kiểm soát được trình bày một cách nhất quán và được điều khiển theo cùng một cách. Có một số thành ngữ khác nhau tuỳ theo nền tảng, chẳng hạn như điều gì xảy ra khi người dùng thực hiện thao tác "giữ lâu" (liên tục chạm vào một thành phần trong vài giây)? Các thành ngữ biểu ngữ có các thành ngữ tiêu chuẩn cho những thành phần này và bạn không thể đáp ứng tất cả các thành ngữ đó chỉ 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 sắp xếp bởi thư viện phần mềm gốc của nền tảng. Thư viện này có các tiện ích đóng gói kiểu giao diện mà người dùng mong đợi. Bạn sẽ có được giao diện mong muốn "miễn phí" chỉ bằng cách sử dụng bộ công cụ gốc.

Quan điểm riêng: 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 đó nâng cao dần phiên bản đó. Mặc dù tính năng nâng cao thường dựa trên các tính năng, nhưng bạn cũng có thể cải thiệ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" mà đôi khi không được cộng đồng web ủng hộ, chủ yếu là vì có quá nhiều trình duyệt khả thi. Nhưng nếu bạn xem 2 hoặc 3 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 để xếp chồng lên các giải pháp thay thế gốc, thì đây có thể là cách để triển khai.

Đố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 được thiết lập bởi trình duyệt mặc định và thời gian chạy web. "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 máy tính cũng như trải nghiệm trên các thiết bị khác mà người dùng có thể đang làm việc cùng. Hơn nữa, có nhiều ứng dụng thành công nhưng không hỗ trợ nhiều cho giao diện gốc. Điều này chắc chắn đúng với các trò chơi (trò chơi dành cho thiết bị di động mà bạn yêu thích có phù hợp với giao diện của hệ điều hành dành cho thiết bị di động không?), và thậm chí đúng với các ứng dụng thông thường hơn, ví dụ: xem các ứng dụng khách 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 tại nơi làm việc.

Tiềm năng được khám phá

Lưu ý: Dễ dàng khám phá các ứng dụng gốc hơn

Các cơ chế phân phối ứng dụng, chẳng hạn như Android's 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 lớn cho toàn bộ ngành công nghiệp di động. Mọi nhà phát triển đều có thể gửi ứng dụng gốc của mình đến thị trường. Tại đây, người dùng có thể khám phá ứng dụng bằng cách kết hợp duyệt, tìm kiếm và nhận đề xuất. Không chỉ vậy, nếu bạn làm đúng cách, các điểm xếp hạng và nhận xét rực rỡ sẽ thuyết phục người dùng nhấn vào nút cài đặt quan trọng.

Bộ đếm: Thực ra, việc khám phá ứng dụng web dễ dàng hơn

Web được cho là phương tiện dễ khám phá nhất từ trước đến nay. Trong URL khiêm tốn, ít nhất là về mặt lý thuyết, chúng tôi có một giá trị nhận dạng duy nhất cho mọi thứ đã từng được phát hành trên web, bao gồm mọi ứng dụng được phát hành 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 các ứng dụng web tương tự như trang web thương mại dành cho thiết bị di động. Trên thực tế, 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 mình chỉ bằng cách liên kết với ứng dụng đó trong email và tin nhắn trên mạng xã hội. Đường liên kết cũng có thể được gửi dưới dạng SMS, 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 vẫn chưa 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 thị trường đó cũng sẽ thay đổi. Đọc trên...

Kiếm tiền

Lưu ý: Bạn có thể kiếm tiền từ quảng cáo gốc

"6 tuổi làm ứng dụng trong giờ ăn trưa, bán được hàng triệu bản 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, các nhà phát triển lớn nhỏ không ngại tìm đến các trang web thương mại dành cho thiết bị di động để kiếm tiền. Nền tảng di động mang lại cho nhà phát triển nhiều cách để tính phí trực tiếp 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. Ngoài ra, một số nền tảng còn cung cấp cơ chế thanh toán và gói thuê bao trong ứng dụng. Các cơ chế này được tích hợp chặt chẽ trong một cơ chế nhất quán, bảo mật. 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 rực rỡ thành nguồn doanh thu dài hạn.

Ngoài các khoản thanh toán cho ứng dụng, bạn cò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 đối lập: Luôn có thể kiếm tiền trên web và các cơ hội đang ngày càng phát triển

Web sẽ không phải là công cụ của ngành 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 cho mỗi lần sử dụng" trực tiếp chưa phát triển, nhưng có nhiều lĩnh vực mà 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ự khả thi. Ví dụ: Google Apps, dòng sản phẩm của 37Signals và các 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, hoạt động tài trợ, quảng cáo chéo cho các sản phẩm và dịch vụ khác.

Mặc dù vậy, việc nhà phát triển web đọc các tiêu đề và trải nghiệm sự gai góc khi thanh toán là hoàn toàn hợp lý. Bạn không thể gửi URL web đến các thị trường gốc, vậy nhà phát triển web cần làm gì? Việc bạn cần làm là tạo một "ứng dụng bao bọc" gốc. Đối với từng nền tảng 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. Sau đó, bạn chỉ cần gửi các ứng dụng này đến các thị trường khác nhau (và hy vọng sẽ nhận được tiền!). Có thể có hàng trăm, hoặc hàng nghìn ứng dụng dựa trên nền tảng web trên các thị trường chính hiện nay, một số ứng dụng được đồng bộ hoá khéo léo đến mức chúng tôi thậm chí không biết ứng dụng web của chúng.

Nhược điểm là khó biên dịch chéo cho từng nền tảng. Khung hiện có như PhoneGap có thể giúp bạn làm điều này. Hơn nữa, có các dịch vụ web như PhoneGap Build và Apparatio đang được phát triển. Hãy trỏ những trang web này đến kho lưu trữ mã của bạn, rồi mở ra một ứng dụng Android, một ứng dụng iOS, v.v. để bạn gửi đến các cửa hàng tương ứng. Bạn 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à trình duyệt web.

Liệu các thị trường có hỗ trợ trực tiếp các ứng dụng web mà không cần phải gói chúng nguyên gốc hay không? Hiện vẫn chưa rõ ràng. 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, 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 cửa hàng trực tuyến mới chỉ xuất hiện ban đầu, nhưng nhiều khả năng chúng tôi sẽ triển khai.

Kết luận

Sẽ thật tuyệt nếu bạn tuyên bố 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 quảng cáo gốc và một số ứng dụng khác phù hợp nhất với web. Có thể nói ngăn xếp web có động lực lớn hơn, nhưng về mặt khả năng và chất lượng thực thi, các ứng dụng gốc cũng phát triển nhanh chóng. Và trừ phi có thời điểm nào đó khi công nghệ web trở thành công dân hạng nhất trên phần lớn các hệ điều hành di động, thì quảng cáo gốc sẽ luôn là một yếu tố quan trọng được cân nhắc.

Một kỹ thuật được đề cập trong bài viết này là các ứng dụng kết hợp và đây có thể là giải pháp tốt nhất cho một số nhà phát triển: chế độ xem web có thể thực hiện và các thành phần gốc dành riêng cho nền tảng nếu không có.

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 nâng cao tăng dần. Web là một công nghệ biết cách nhắm mục tiêu vô số thiết bị và hệ điều hành xung quanh. Cho dù bạn chọn gọi đó là "sự phân mảnh" hay "tính đa dạng", web đều chấp nhận nó và các nhà phát triển của bạn có thể hưởng lợi từ tất cả các yếu tố nghệ thuật có sẵn hiện có.