Apa yang menghentikan aplikasi HTML5 dan JS berfungsi sebaik aplikasi asli?

9

Dari apa yang saya mengerti,

  • HTML adalah bahasa mark-up, demikian juga konten XAML, XIB dan apa pun yang digunakan Android dan kerangka kerja pengembangan UI asli lainnya.
  • JavaScript adalah bahasa pemrograman yang digunakan bersamanya untuk menangani skrip sisi klien yang akan mencakup hal-hal seperti penanganan acara, validasi sisi klien, dan apa pun yang dilakukan C #, Java, Objective-C atau C ++ dalam berbagai kerangka kerja seperti itu.
  • Ada pola MVC / MVVM yang tersedia dalam kerangka kerja seperti Sencha, Angular dll.
  • Kami memiliki penyimpanan lokal dalam bentuk sqlite dan key-value store sebagaimana kerangka kerja lain miliki dan Anda memiliki spesifikasi API untuk hampir semua yang hilang.
  • Setiap kali kerangka kerja UI asli harus membuat UI, itu harus menguraikan markup yang sama dan membuat UI.

Rincian pertanyaan

  • Apa yang berhenti melakukan hal yang sama dalam HTML dan JS itu sendiri?
  • Alih-alih memiliki kontrol web atau browser sebagai lapisan di antara mengapa tidak bisa HTML (bersama dengan CSS) dan JS dibuat untuk melakukan cara yang sama?
  • Bahkan jika ada layer, demikian juga .net runtime dan JVM dalam kasus lain di mana C ++, C tidak digunakan.
  • Jadi mari kita ambil contoh Android, seperti Dalvik, mengapa Can't Chromium menjadi pilihan lain (bersama dengan dalvik dan NDK) di mana HTML melakukan apa yang dilakukan markup android dan JavaScript digunakan untuk melakukan apa yang Java lakukan?

Jadi pertanyaannya adalah,

Sekalipun implementasi saat ini tidak sebagus ini, tetapi secara teoritis apakah mungkin untuk membuat aplikasi berbasis HTML5 berfungsi sebagai aplikasi asli lainnya khususnya di ponsel?

Amogh Talpallikar
sumber
1
tolong menolak untuk mengklarifikasi pernyataan mana yang Anda mulai, dan apa pertanyaan sebenarnya.
funkybro
Bisakah Anda mengklarifikasi apa yang Anda maksud dengan "Apa yang berhenti melakukan hal yang sama dalam HTML dan JS itu sendiri?" Saya tidak mengerti apa yang Anda maksud dengan "sama" - Anda telah membuat empat pernyataan sebelumnya, dan saya tidak yakin yang Anda maksud dalam pertanyaan itu.
apsillers
Jika saya memiliki platform pengembangan asli yang menggunakan HTML sebagai markup alih-alih sesuatu yang baru. dan menggunakan JS sebagai bahasa, akankah kinerjanya lebih baik? Google dalam I / O ini mengatakan, mereka bersikap praktis dan menggunakan Android di ponsel dan bukan Chrome OS. Jadi apa artinya, FF OS bukan konsep praktis? apakah mungkin untuk aplikasi FFOS untuk melakukan sebaik aplikasi android pada platform masing-masing jika semua praktik terbaik diikuti?
Amogh Talpallikar
Lihatlah aplikasi Windows Metro. Mereka adalah aplikasi asli yang menggunakan HTML untuk desain GUI dan Javascript untuk logika di baliknya.
Philipp
Kinerja HTML / JS umumnya lebih dari cukup baik untuk antarmuka pengguna yang menampilkan informasi, dan berdasarkan tindakan pengguna, membuat permintaan ke server luar. Itu awalnya tidak dibangun untuk lebih dari itu, tetapi sekarang ini secara mengesankan lebih mampu. Namun, untuk situasi yang melibatkan lebih banyak akses perangkat langsung, berinteraksi dengan kode asli, atau berinteraksi dengan sistem operasi (yaitu, pemberitahuan), masih belum ada cara yang baik untuk menggunakan teknologi web tujuan umum untuk itu.
Katana314

Jawaban:

11

Poster boy untuk aplikasi HTML5, LinkedIn menjadi asli awal 2013. Dalam wawancara di VentureBeat mereka menjelaskan alasannya.

Saya pikir ini adalah bagian yang paling relevan dengan pertanyaan Anda:

Prasad mengatakan masalah kinerja tidak menyebabkan crash atau membuat aplikasi berjalan lambat. Apa yang dia katakan menunjukkan bahwa HTML5 untuk web seluler masih memiliki masa depan yang cerah - tetapi hanya jika pengembang mau membangun alat untuk mendukungnya.

...

Ada beberapa hal yang hilang secara kritis. Salah satunya adalah dukungan alat - memiliki debugger yang benar-benar berfungsi, alat kinerja yang memberi tahu Anda di mana kehabisan memori. Jika Anda melihat Android dan iOS, ada dua perusahaan yang sangat besar yang berfokus pada alat bangunan untuk memberikan banyak informasi terperinci ketika terjadi kesalahan dalam produksi. Di sisi web seluler, menjadikan alat desktop itu berfungsi untuk perangkat seluler benar-benar sulit. Potongan besar kedua yang kami perjuangkan adalah operabilitas, informasi diagnostik runtime. Bahkan sekarang, ketika kita membangun HTML5, kita membangunnya sebagai aplikasi sisi klien. Ini lebih dari arsitektur client-server. ... Pengoperasian itu, memberi kami informasi ketika kami didistribusikan ke sejumlah besar pengguna, tidak ada banyak alat hebat untuk mendukung itu, juga.

[Prasad juga mencatat bahwa dev dan ops alat untuk menyelesaikan masalah dengan cepat "tidak ada."]

Karena kedua hal itu tidak ada, orang-orang kembali ke asalnya. Bukan berarti HTML5 tidak siap; itu karena ekosistem tidak mendukungnya. ... Ada alat, tapi itu awalnya. Orang-orang hanya mencari tahu dasar-dasarnya.

vartec
sumber
Saya tidak mengerti. Kami memiliki perusahaan yang sangat besar: Google, Microsoft, Apple yang berfokus pada mendukung Chrome, Safari, dan IE. Kami memiliki Mozilla berkomitmen untuk Firefox. Kami memiliki Alat Dev Chrome, Inspektur Web, Firebug. Dan Prasad mengatakan bahwa tidak ada alat?
niutech
@niutech: katakanlah Anda menginginkan alat seperti Valgrind untuk aplikasi HTML5. Tidak banyak.
vartec
5

Kurangnya pustaka standar Javascript adalah penghambat yang mengerikan. Ada beberapa kerangka kerja hebat seperti jQuery, Dojo, YUI, untuk beberapa nama, tetapi semuanya hanya fokus pada layer presentasi dan XHR.

Apakah Anda ingin logging yang dapat dikonfigurasi, alat kriptografi, algoritma grafik, generator UUID, Peta, Set, Pohon, template, manajemen dependensi, manipulasi tanggal, lokalisasi / internasionalisasi, operasi matriks, injeksi dependensi, unit test, pengurangan peta, pemrosesan XML? Sepele untuk bahasa JVM atau .NET - dalam Javascript Anda sering harus menggulung implementasi Anda sendiri.

Maros Urbanec
sumber
Tambahkan pelaporan ke sana.
Alan B
ECMAScript 6 menambahkan sebagian besar fitur ini. Google Closure Library adalah solusi lain.
niutech
Angular menyediakan cara deklaratif yang bagus sekarang.
Amogh Talpallikar
2

Salah satu alasan mengapa Javascript lambat adalah kurangnya jenis keamanannya. Variabel apa pun bisa dari jenis apa saja kapan saja. Juga, sebagian besar operasi berlaku dengan banyak jenis berbeda, tetapi memiliki semantik yang berbeda . Istilah sederhana

a += b;

bukankah itu sepele bagi penerjemah, karena adan bbisa berupa angka atau string. Ketika keduanya angka, itu adalah tambahan aritmatika. Ketika keduanya adalah string, ini adalah rangkaian string. Ketika satu string dan satu angka, angka tersebut harus diformat sebelum melakukan penggabungan string. Ini adalah operasi yang sama sekali berbeda yang perlu menginterpretasikan argumen secara berbeda.

Tergantung pada jenis adan b, jenis asekarang bisa bilangan bulat, ganda atau String, terlepas dari jenis apa itu sebelumnya.

Karena variabel dalam JS dapat mengubah tipenya kapan saja, juru bahasa hampir tidak bisa mengevaluasi jenis-jenisnya setiap kali instruksi ini dipanggil untuk menghindari melakukan operasi yang salah. Ini membutuhkan siklus CPU tambahan.

Fitur lain yang membuat pengoptimalan jauh lebih sulit adalah array jarang atau pengumpulan sampah dan penangan peristiwa yang dapat menembak kapan saja.

Lihatlah asm.js - Ini adalah bagian dari Javascript yang memungkinkan pengoptimalan yang lebih baik dengan menyingkirkan beberapa fitur JS, terutama pengetikan dinamis.

Philipp
sumber
1
Kompiler JIT Javascript modern menghasilkan kode mesin khusus dengan cepat untuk jenis yang Anda gunakan jika stabil dalam penggunaan runtime aktual Anda. Jika Anda benar-benar coding dengan cara yang abisa integer, string atau double dll maka Anda benar. Dan browser lama yang masih menggunakan penerjemah tentu saja tidak memiliki optimasi ini juga.
Esailija
1
@Esailija Lingkungan JavaScript modern jauh lebih cepat daripada yang lama. Tetapi mereka masih lebih lambat jika dibandingkan dengan lingkungan modern yang diketik secara statis, seperti .NET, JVM, ErlangVM dll.
David Sergey
@tidak ya saya tidak mengatakan itu, hanya mengatakan bahwa posting ini menggambarkan bagaimana kompiler jit interpreter / non-mengoptimalkan akan melakukannya dan itu sangat lambat.
Esailija