Tôi là một nhà phát triển di động đã dành rất nhiều thời gian để xem xét vấn đề này.
Tại sao bạn hỏi
Rất có thể, bạn hy vọng sẽ giảm chi phí phát triển ứng dụng bằng cách:
- Sử dụng các kỹ năng phát triển HTML5 / Javascript hiện có
- Nhắm mục tiêu nhiều nền tảng mà không cần viết nhiều ứng dụng từ đầu
- Không phải duy trì nhiều cơ sở mã trong tương lai
Lý do cũng có thể bao gồm:
- Phát triển HTML5 / Javascript được coi là "dễ dàng" hơn so với phát triển nền tảng bản địa
- Tránh thanh toán phí đăng ký chương trình dành cho nhà phát triển
- Tránh các hạn chế nội dung của cửa hàng ứng dụng (cờ bạc, v.v.)
- Tránh mua phần cứng phát triển (ví dụ: Mac để phát triển iPhone)
Định nghĩa
Chúng ta hãy thiết lập chính xác những gì chúng ta muốn nói trong mỗi ba phương pháp được đề cập:
Bản địa
Một ứng dụng được cài đặt trên thiết bị, thường là từ cửa hàng ứng dụng của nó (mặc dù đôi khi có thể được tải xuống). Đối với mục đích của cuộc thảo luận này, giao diện người dùng của ứng dụng gốc thường không chỉ bao gồm một chế độ xem web toàn màn hình.
Web di động
Trên thực tế có thể là bất kỳ trang web nào, tuy nhiên đối với cuộc thảo luận này, hãy xem xét một ứng dụng web một trang cố gắng bắt chước giao diện của ứng dụng gốc. Nó không phải là một ứng dụng gốc, nó chạy trong trình duyệt của thiết bị.
Lai
hybrid ứng dụng instanceof
ứng dụng bản địa.
Hầu hết mọi người có thể hiểu một ứng dụng lai là một ứng dụng web dành cho thiết bị di động (một lần nữa rất có thể bắt chước giao diện của ứng dụng gốc), nhưng được đóng gói dưới dạng một ứng dụng gốc có quyền truy cập vào các dịch vụ gốc (à la Phonegap).
Tuy nhiên, trên thực tế có một phổ giữa mô hình Phonegap và hoàn toàn tự nhiên mà tôi sẽ đến sau.
Web di động
Các hạn chế về kỹ thuật
Trước tiên, trước tiên, hãy liệt kê một số hạn chế kỹ thuật đối với các ứng dụng web dành cho thiết bị di động có thể là các công cụ giải quyết tùy thuộc vào những gì bạn đang làm:
- Chỉ giao diện người dùng HTML / canvas
- Không có quyền truy cập vào một số sự kiện và dịch vụ của thiết bị (những tài liệu này được ghi lại rộng rãi)
- Không thể được liệt kê trong các cửa hàng ứng dụng (ảnh hưởng đến khả năng khám phá)
- Có thể trở thành toàn màn hình và có biểu tượng màn hình chính trên iOS, tuy nhiên đây là một trải nghiệm bất thường và lạ lẫm đối với hầu hết người dùng
Nếu bạn có thể sống với tất cả những điều trên, thì hãy đọc tiếp để biết thêm về những thách thức của các ứng dụng web kiểu trang đơn. Tuy nhiên, phần này sẽ không hoàn thành nếu không tham khảo ứng dụng FT.
Financial Times
Các FT ứng dụng web là một ví dụ nổi tiếng của phong cách này của ứng dụng. Đây là một tính năng thú vị từ tờ báo Anh Guardian về nó.
Đó chắc chắn là một kỳ công đáng chú ý của kỹ thuật. Lưu ý rằng hiện tại nó vẫn chỉ khả dụng trên iOS - điều này cho tôi biết rằng họ đang thấy rằng việc giải quyết các thách thức của phát triển trình duyệt chéo tiên tiến thực sự rất khó khăn.
Các ứng dụng web kiểu đơn trang
Phần này áp dụng cho cả ứng dụng web di động và ứng dụng kiểu Phonegap.
Giao diện kiểu bản địa trong ứng dụng web thường đạt được với một khung như Sencha Touch cung cấp một bộ các thành phần UI để bạn sử dụng.
Các khung như vậy là tốt cho các UI rất đơn giản. Tuy nhiên họ thiếu linh hoạt. Bạn sẽ không thể triển khai bất kỳ thiết kế ứng dụng gốc nào bằng Sencha, bạn sẽ cần điều chỉnh thiết kế của mình theo những gì khung có thể đáp ứng.
Cách chính mà các khung công tác này phải chịu là cố gắng mô phỏng các rắc rối UI của chính nền tảng. Hiệu ứng nảy nhỏ tuyệt vời mà bạn có được khi bạn cuộn đến cuối danh sách trên iPhone? Khung của bạn cần mô phỏng điều đó trong Javascript. Không thể tạo lại hoàn toàn, nó sẽ dễ bị chậm lại và người dùng của bạn sẽ bị mắc kẹt trong "thung lũng kỳ lạ" của một ứng dụng trông giống như bản địa, nhưng rõ ràng là không, và phi kỹ thuật người dùng sẽ không thể đặt ngón tay của họ chính xác tại sao.
Huyền thoại "HTML5 / Javascript thật dễ dàng"
Sự phân mảnh thiết bị trong các trình duyệt web đầy rẫy và khi bạn vượt ra khỏi HTML và CSS cơ bản nhất, bạn sẽ nhận thấy mọi thứ không hoạt động như bạn mong đợi. Bạn có thể thấy mình dành nhiều thời gian hơn để giải quyết các vấn đề UI khó khăn hơn là bạn đã lưu nó thực hiện hai lần. Nếu bạn là người bản địa, lưu ý rằng các lần xem web ứng dụng gốc không giống như trình duyệt thiết bị và có các vấn đề phân mảnh riêng.
Và khi ứng dụng của bạn trở nên phức tạp hơn về mặt chức năng, bạn sẽ thấy rằng bạn cần nhiều hơn các kỹ năng jquery cơ bản để giữ cho Javascript của bạn sạch sẽ và có thể bảo trì.
Điều đó nói rằng, hoàn toàn có thể tạo ra các ứng dụng đơn giản, chức năng khá nhanh chóng với phương pháp này. Nhưng nó khá rõ ràng khi một ứng dụng đang làm điều đó.
Hơn nữa dọc theo quang phổ
Vì vậy, chúng tôi muốn có một UX tốt hơn các ứng dụng kiểu Phonegap có thể cung cấp, mà không cần viết hoàn toàn mọi thứ từ đầu nhiều lần. Chúng ta có thể làm gì?
Chia sẻ mã không phải UI
Có một loạt các kỹ thuật có sẵn để chia sẻ logic kinh doanh trên nhiều nền tảng bản địa. Google đã ra mắt J2ObjC , dịch Java thành Objective-C. Với việc bao thanh toán cẩn thận, một thư viện Java có thể được sử dụng trên cả Android và iOS.
Các thư viện như Calatrava và Kirin cho phép các cơ sở mã được viết bằng Javascript (và do đó, bất kỳ thứ gì có thể được biên dịch thành Javascript) đều được xử lý từ mã gốc. Tuyên bố miễn trừ trách nhiệm: Tôi làm việc cho các Nền tảng tương lai đã tạo ra Kirin; chúng tôi đã thành công lớn khi sử dụng nó trên iOS với Javascript được tạo từ Java bằng GWT, với mã Java cũng được chạy tự nhiên trên Android.
Sử dụng xem web ... khi thích hợp
Xem xét toàn màn hình có rất nhiều việc phải làm để có thể bắt chước chuyển đổi màn hình và hiệu ứng thoát. Nhưng một webview bên trong ứng dụng chrome có thể không thể phân biệt được với bản địa.
Có các phương pháp tiêu chuẩn và được ghi chép tốt cho các ứng dụng và webview để giao tiếp.
Danh sách và bảng có thể hoạt động đặc biệt tốt khi được thực hiện theo cách này, tuy nhiên, nhập văn bản là một ví dụ về thứ gì đó được xử lý tốt nhất (để kiểm soát hoàn toàn bàn phím).
Tóm tắt
Cách tiếp cận phù hợp với bạn phụ thuộc vào mức độ phức tạp của ứng dụng của bạn và mức độ đánh bóng UI bạn sẽ hài lòng.
Phương châm của tôi: sử dụng các cuộc xem web bất cứ nơi nào bạn có thể, nhưng hãy đảm bảo rằng người dùng của bạn không thể biết .