HTML5 vs Native

Debat tentang aplikasi seluler

Michael Mahemoff
Michael Mahemoff

Pengantar

Aplikasi seluler dan HTML5 adalah dua teknologi terpopuler saat ini, dan keduanya memiliki banyak kesamaan. Aplikasi web berjalan di browser seluler dan juga dapat dikemas ulang sebagai aplikasi native di berbagai platform seluler. Dengan banyaknya platform yang didukung, ditambah dengan kemampuan browser seluler yang luar biasa, developer beralih ke HTML5 sebagai solusi "tulis sekali, jalankan di banyak platform". Namun, apakah solusi ini benar-benar layak? Masih ada alasan kuat untuk menggunakan aplikasi native, dan jelas, banyak developer yang memang memilih jalur tersebut. Artikel ini adalah debat tentang aplikasi native versus web.

Kekayaan Fitur

Poin: Aplikasi native dapat melakukan lebih banyak hal

Kita dapat membagi fungsi seluler menjadi dua dimensi: pengalaman aplikasi itu sendiri, dan cara aplikasi terhubung ke ekosistem perangkat, misalnya untuk Android, ini akan menjadi fitur seperti widget dan notifikasi. Aplikasi native unggul dalam kedua dimensi tersebut.

Dalam hal pengalaman aplikasi, aplikasi native dapat melakukan lebih banyak hal. Aplikasi native dapat dengan mudah mendapatkan peristiwa geser, bahkan multitouch, untuk platform yang mendukungnya. Aplikasi native biasanya dapat bertindak saat tombol fisik ditekan, seperti tombol penelusuran dan kontrol volume Android. Aplikasi native juga dapat mengakses hardware, seperti GPS dan kamera. Dengan izin pengguna, beberapa platform memberikan akses tanpa batas ke sistem operasi. Coba deteksi sisa baterai dengan HTML5.

Namun, pengalaman dalam aplikasi lebih dari itu. Sistem operasi seperti Android menyediakan berbagai cara bagi aplikasi untuk berinteraksi dengan pengguna, dan memang, dengan aplikasi lain. Anda memiliki widget aktif di halaman beranda. Anda memiliki notifikasi, yang muncul di status bar perangkat. Anda juga memiliki intent, yang memungkinkan aplikasi Anda mengumumkan dirinya sebagai penyedia layanan umum yang mungkin diperlukan oleh aplikasi lain.

Poin sanggahan: Fitur native dapat ditambah, dan web juga mengejar

Memang benar bahwa banyak fitur dalam aplikasi yang tidak dapat dijangkau oleh aplikasi HTML5. Seberapa hebat pun kemampuan web Anda, jika aplikasi Anda terjebak dalam sandbox tanpa API kamera, aplikasi tersebut tidak akan dapat mengambil foto dalam waktu dekat. Untungnya, Anda tidak harus berada di sandbox tersebut. Jika Anda benar-benar ingin aplikasi web mengambil foto, Anda dapat membuat aplikasi native, yang memiliki tampilan web tersemat yang menyediakan sebagian besar antarmuka pengguna. Inilah cara framework PhoneGap open source beroperasi: framework ini mengisi celah dengan mengekspos fitur native sebagai layanan web, yang dipanggil oleh tampilan web menggunakan API jaringan standar. Saat Anda membuat aplikasi hybrid seperti ini, Anda juga dapat terhubung ke fitur platform seperti widget, notifikasi, dan intent.

Membuat aplikasi hybrid - native plus web - bukanlah solusi yang ideal. Aplikasi ini menambah kompleksitas dan hanya berlaku untuk aplikasi web yang dikemas sebagai aplikasi native, bukan situs tradisional yang diakses dari browser seluler. Namun, hal ini mungkin tidak diperlukan dalam waktu lama. Standar web berkembang pesat, dan browser seluler modern terus mengikuti perkembangan tersebut. Misalnya, penyimpanan offline, geolokasi, grafis canvas, dan pemutaran video/audio semuanya menikmati dukungan luas di antara smartphone modern. Bahkan kamera mulai didukung - mulai Android 3.1, Anda dapat mengambil foto dan merekam video menggunakan standar web. Browser iOS terbaru mendukung WebSocket untuk streaming 2 arah, serta deteksi orientasi perangkat.

Secara keseluruhan, perangkat seluler terus berkembang. Namun, web juga berkembang, dan berkembang dengan cepat. Di antara browser desktop saja, ada lima vendor browser utama yang mengembangkan standar dan menambahkan fitur dengan kecepatan kilat. Meskipun bukan proses yang mudah untuk mem-porting fitur ini ke perangkat seluler, banyak di antaranya telah masuk ke browser seluler.

Aplikasi native adalah target yang bergerak cepat, tetapi web menutup celah.

Performa

Poin: Aplikasi native berjalan lebih cepat

Aplikasi native tidak memiliki hambatan runtime web untuk ditangani. Aplikasi native berjalan dekat dengan hardware dan dapat memanfaatkan peningkat performa seperti akselerasi GPU dan multithreading.

Poin sanggahan: Runtime web jauh lebih cepat saat ini, dan sebagian besar aplikasi tidak memerlukan kecepatan tersebut

Web telah menjadi lebih cepat dalam beberapa tahun terakhir. V8, mesin JavaScript yang disertakan dengan Chrome, adalah perkembangan besar dalam performa web saat diluncurkan, dan sejak saat itu, performanya hanya menjadi lebih cepat:

Grafik performa V8

Mesin rendering grafis juga telah mempercepat web, dan kini akselerasi hardware mulai terjadi. Lihat peningkatan kecepatan yang disediakan oleh canvas yang dipercepat hardware:

Grafik kanvas dengan akselerasi hardware

Selain itu, Web Workers API baru memungkinkan multithreading, dan developer web modern juga dapat menggunakan berbagai library yang dioptimalkan performanya, serta teknik pengoptimalan performa yang diteliti dengan baik. Meskipun sebagian besar dimulai di web desktop, library tersebut masih relevan untuk perangkat seluler, dan perhatian yang diberikan pada perangkat seluler semakin meningkat, misalnya guru performa Steve Souders memiliki halaman khusus untuk alat performa seluler.

Tidak semua kemajuan desktop telah masuk ke setiap platform seluler, tetapi tren menunjukkan bahwa kemajuan tersebut sedang dalam perjalanan. Penting juga untuk diperhatikan bahwa sebagian besar aplikasi seluler bukanlah game 3D yang canggih, tetapi pada dasarnya berbasis informasi: berita, email, jadwal, jejaring sosial, dll. Kunjungi beberapa situs dari perangkat seluler Anda, misalnya Gmail, Amazon, Twitter, dan Anda dapat mengonfirmasi bahwa performa web seluler lebih dari memadai. Untuk game, game dasar sudah dapat dibuat dengan canvas 2D, dan WebGL mulai muncul di perangkat seluler - lihat Firefox 4. Hingga WebGL tersebar luas, ada keluarga framework yang terus berkembang yang mengompilasi aplikasi WebGL ke aplikasi native yang dapat memanfaatkan OpenGL, misalnya ImpactJS.

Pengalaman Developer

Poin: Aplikasi native lebih mudah dikembangkan

Aplikasi native menggunakan bahasa pemrograman yang kuat (misalnya Java, Objective C, C++) yang dirancang untuk pengembangan aplikasi kompleks dan memiliki rekam jejak yang terbukti. API dirancang dari awal untuk mendukung platform yang ada. Anda dapat dengan mudah melakukan debug aplikasi di emulator desktop yang memberikan representasi yang dekat dengan perangkat target.

Hal yang membuat pengembangan web sangat merepotkan adalah keragaman browser dan runtime yang sangat besar. Saat aplikasi Anda berjalan, tidak ada jaminan bahwa fitur X akan tersedia. Dan meskipun tersedia, bagaimana browser akan menerapkannya? Standar terbuka untuk interpretasi.

Poin sanggahan: Web sering kali lebih mudah dikembangkan, terutama jika menargetkan beberapa perangkat

Mari kita bahas teknologi inti terlebih dahulu. Memang benar bahwa standar web awalnya dibuat pada era ketika web pada dasarnya adalah tentang dokumen, bukan aplikasi, dengan JavaScript yang dibuat dan di-deploy hanya dalam 10 hari. Namun, standar web ternyata jauh lebih mumpuni dari yang dibayangkan - developer web telah belajar untuk memanfaatkan bagian yang baik dan mengendalikan bagian yang buruk, dengan pola yang kini dipahami untuk desain yang dapat diskalakan. Selain itu, standar tidak statis, dan upaya seperti HTML5, CSS3, dan EcmaScript Harmony semuanya meningkatkan pengalaman developer. Apakah Anda lebih suka C++, Java, atau JavaScript adalah masalah debat agama, dan juga bergantung pada basis kode lama Anda. Namun, kita tentu dapat menyertakan JavaScript sebagai pesaing serius saat ini.

Sisi lain dari fragmentasi browser/runtime adalah fakta bahwa semua lingkungan ini ada sejak awal. Mengembangkan aplikasi Android di Java, dan Anda akan menghadapi porting penuh ke Objective C untuk mendukung iOS. Kembangkan aplikasi web sekali dan aplikasi tersebut akan berjalan di Android dan iOS, belum lagi WebOS, BlackBerry, Windows Mobile, dan… yah, itu teorinya. Dalam praktiknya, Anda harus menyesuaikan berbagai hal untuk setiap platform jika benar-benar ingin mendapatkan pengalaman yang tepat. Namun, Anda juga harus melakukannya di aplikasi native, untuk sebagian besar sistem operasi seluler - ada versi yang berbeda dan perangkat yang berbeda.

Kabar baiknya adalah "fragmentasi" selalu seperti ini di web, dan ada teknik yang dikenal untuk menanganinya. Yang terpenting, prinsip peningkatan progresif mendesak developer untuk menargetkan perangkat dasar terlebih dahulu, dan menambahkan lapisan keunggulan khusus platform jika tersedia. Mantra deteksi fitur juga membantu dan saat ini, kita memiliki dukungan library dari Modernizr untuk mendukung desain web responsif. Dengan penggunaan teknik ini secara bijak, Anda dapat memperluas jangkauan ke sebagian besar perangkat, bahkan "ponsel fitur" lama, bahkan faktor bentuk seperti jam tangan dan TV, terlepas dari merek dan OS. Saksikan demonstrasi multi-UI kami di Google IO 2011, tempat kami menargetkan faktor bentuk yang berbeda (ponsel fitur, smartphone, tablet, desktop, TV) dengan basis kode logika dan markup yang sama.

Tampilan

Poin: Aplikasi native sesuai dengan tampilan platform

Salah satu fitur yang menentukan platform adalah tampilan. Pengguna mengharapkan kontrol ditampilkan secara konsisten dan dimanipulasi dengan cara yang sama. Ada idiom tertentu yang berbeda dari platform ke platform, misalnya apa yang terjadi saat pengguna melakukan "tekan lama" (terus menyentuh elemen selama beberapa detik)? Platform memiliki idiom standar untuk hal-hal seperti itu, dan Anda tidak dapat memuaskan semuanya dengan satu aplikasi HTML5.

Selain itu, tampilan platform diatur oleh library software native platform, yang widgetnya merangkum jenis tampilan yang diharapkan pengguna. Anda mendapatkan banyak tampilan yang diharapkan "secara gratis" hanya dengan menggunakan toolkit native.

Poin sanggahan: Web memiliki tampilan sendiri, dan Anda juga dapat menyesuaikan antarmuka web untuk platform yang paling Anda pedulikan

Seperti yang dijelaskan di bagian sebelumnya, cara pengembangan web adalah menulis versi dasar "satu ukuran untuk semua", lalu meningkatkannya secara progresif. Meskipun peningkatan biasanya didasarkan pada fitur, Anda juga dapat meningkatkannya dengan menargetkan platform yang paling Anda pedulikan. Ini adalah jenis "deteksi browser", yang terkadang tidak disukai oleh komunitas web, terutama karena ada begitu banyak browser yang mungkin ada. Namun, jika Anda melihat dua atau tiga platform dengan prioritas yang sangat tinggi, dan Anda bersedia melakukan upaya ekstra untuk bersaing dengan alternatif native, ini mungkin cara yang tepat.

Sejauh versi dasar, web memiliki tampilan sendiri, dan kita bahkan dapat mengatakan bahwa setiap platform seluler memiliki "tampilan web" sendiri yang ditetapkan oleh browser default dan runtime web. "Tampilan web" mungkin cocok untuk pengguna Anda, dan sebenarnya, memungkinkan Anda mencapai tingkat konsistensi yang lebih tinggi dengan pengalaman browsing desktop, serta pengalaman di perangkat lain yang mungkin digunakan pengguna. Selain itu, ada banyak aplikasi sukses yang tidak terlalu mendukung tampilan native. Hal ini tentu berlaku untuk game (apakah game seluler favorit Anda mengikuti tampilan OS seluler Anda?), dan bahkan berlaku untuk aplikasi yang lebih konvensional, misalnya lihat klien Twitter native yang lebih populer di platform pilihan Anda, dan Anda akan melihat berbagai mekanisme antarmuka pengguna yang berfungsi.

Visibilitas

Poin: Aplikasi native lebih mudah ditemukan

Mekanisme distribusi aplikasi, seperti Market Android dan App Store Apple, sangat populer dalam beberapa tahun terakhir dan merupakan pendorong utama bagi seluruh industri seluler. Setiap developer dapat mengirimkan aplikasi native mereka ke marketplace, tempat pengguna dapat menemukannya melalui kombinasi browsing, penelusuran, dan mendapatkan rekomendasi. Tidak hanya itu, tetapi jika Anda telah melakukan pekerjaan dengan benar, rating dan komentar yang bagus akan meyakinkan pengguna untuk mengklik tombol instal yang sangat penting.

Poin sanggahan: Sebenarnya, aplikasi web lebih mudah ditemukan

Web bisa dibilang merupakan media yang paling mudah ditemukan yang pernah dibuat. Dalam URL sederhana, kita memiliki (setidaknya secara teori) ID unik untuk semua yang pernah dipublikasikan di web, yang mencakup aplikasi apa pun yang dipublikasikan di situs standar. Mesin telusur memudahkan penemuan konten tersebut dan situs lain dapat menautkannya, termasuk katalog aplikasi web yang mirip dengan marketplace seluler. Memang, setiap orang dapat membagikan aplikasi web kepada teman-teman mereka hanya dengan menautkannya dalam email dan pesan jejaring sosial. Link juga dapat dikirim dalam SMS, tempat pengguna seluler dapat mengklik link dan meluncurkan aplikasi di browser perangkat mereka.

Kita belum memiliki marketplace yang sama tempat pengguna dapat memberi rating dan mengomentari aplikasi, tetapi hal itu juga berubah. Baca terus…

Monetisasi

Poin: Aplikasi native dapat dimonetisasi

"Anak berusia 6 tahun membuat aplikasi saat jam makan siang, menjual satu miliar salinan dengan harga $3 per salinan". Anda sering melihat berita utama tersebut akhir-akhir ini, jadi tidak heran jika developer besar dan kecil mencari marketplace seluler untuk monetisasi. Platform seluler menawarkan beberapa cara bagi developer untuk menagih aplikasi mereka secara langsung. Yang paling sederhana adalah pembayaran satu kali, untuk membuka aplikasi selamanya. Ada juga mekanisme pembayaran dan langganan dalam aplikasi yang ditawarkan di beberapa platform, dan mekanisme tersebut terintegrasi secara ketat dalam mekanisme yang konsisten dan aman. Bentuk pembayaran yang lebih baru ini memungkinkan developer mengubah aplikasi yang sangat populer menjadi aliran pendapatan jangka panjang.

Selain pembayaran aplikasi, Anda dapat melakukan monetisasi dengan model web tradisional, seperti iklan dan sponsor.

Poin sanggahan: Monetisasi di web selalu memungkinkan, dan peluangnya terus bertambah

Web tidak akan menjadi mesin industri modern jika tidak ada banyak peluang untuk mendapatkan uang. Meskipun mekanisme "bayar per penggunaan" langsung belum berkembang, ada berbagai ceruk tempat solusi "software as a service" berbasis langganan memang menjadi layak. Contohnya mencakup Google Apps, berbagai produk 37Signals, dan versi premium dari berbagai layanan email. Selain itu, pembayaran langsung bukan satu-satunya cara untuk mendapatkan keuntungan dari aplikasi web. Ada iklan online, link afiliasi, sponsor, promosi silang ke produk dan layanan lain.

Meskipun demikian, wajar jika developer web membaca berita utama dan mengalami sedikit rasa iri terhadap pembayaran. Anda tidak dapat mengirimkan URL web ke marketplace native, jadi apa yang harus dilakukan developer web? Yang Anda lakukan adalah membuat "aplikasi wrapper" native - untuk setiap platform yang ingin Anda targetkan, buat aplikasi native kosong yang hanya berisi tampilan web. Tampilan web adalah tempat Anda menyematkan aplikasi yang sebenarnya. Kemudian, Anda cukup mengirimkan aplikasi ini ke berbagai marketplace (dan semoga uangnya masuk!). Mungkin ada ratusan, jika tidak ribuan, aplikasi yang didukung web di marketplace utama saat ini, beberapa di antaranya begitu cerdik diasimilasi sehingga kita bahkan tidak mengetahui aplikasi web mereka sama sekali.

Kelemahannya adalah kewajiban kompilasi silang ke setiap platform. Di sinilah framework yang ada seperti PhoneGap dapat membantu. Bahkan lebih baik lagi, ada layanan web seperti PhoneGap Build dan Apparatio yang sedang dikembangkan. Arahkan situs ini ke repositori kode Anda, dan aplikasi Android, aplikasi iOS, dan sebagainya akan muncul… siap untuk Anda kirimkan ke masing-masing app store. Tidak perlu menginstal SDK native di komputer Anda; yang Anda butuhkan untuk membuat semua aplikasi native ini hanyalah editor kode dan browser web.

Apakah marketplace akan mendukung aplikasi web secara langsung, tanpa semua overhead pengemasan secara native? Belum jelas. Kita tahu bahwa Google memperkenalkan Chrome Web Store tahun lalu, dan meskipun hanya berlaku untuk desktop, app store tersebut telah memicu minat dari vendor browser lain, dan secara keseluruhan merupakan bagian dari tren menuju katalog aplikasi web, termasuk beberapa upaya khusus seluler. Konsep app store web masih dalam tahap awal, tetapi tanda-tandanya menjanjikan.

Kesimpulan

Akan lebih baik jika kita dapat menyatakan pemenang di sini, tetapi saat ini, tidak ada pemenang yang jelas. Beberapa aplikasi paling cocok untuk native dan beberapa paling cocok untuk web. Stack web bisa dibilang memiliki lebih banyak momentum, tetapi dalam hal kemampuan dan kualitas eksekusi, aplikasi native juga bergerak cepat. Dan kecuali jika ada saatnya teknologi web menjadi prioritas utama di sebagian besar OS seluler, aplikasi native akan selalu menjadi pertimbangan penting.

Salah satu teknik yang disebutkan dalam artikel ini adalah aplikasi hybrid, dan ini mungkin merupakan kompromi terbaik bagi beberapa developer: tampilan web jika memungkinkan dan komponen native khusus platform jika tidak.

Jika Anda memilih jalur web, perhatikan standar web dan prinsip peningkatan progresif. Web adalah teknologi yang tahu cara menargetkan banyak perangkat dan sistem operasi di sekitar. Baik Anda memilih untuk menyebutnya "fragmentasi" atau "keragaman", web menerimanya dan Anda sebagai developer dapat memanfaatkan semua teknologi sebelumnya.