Saat ini, satu-satunya bahasa yang didukung sepenuhnya, dan standar de-facto untuk manipulasi pohon DOM di browser adalah JavaScript. Sepertinya ia memiliki masalah desain yang mendalam yang menjadikannya ladang ranjau bug dan lubang keamanan bagi pemula.
Apakah Anda mengetahui adanya inisiatif yang direncanakan atau ada untuk memperkenalkan bahasa yang lebih baik (didesain ulang) dalam bentuk apa pun (tidak hanya javascript) untuk manipulasi pohon DOM dan permintaan HTTP di browser generasi berikutnya? Jika ya, apa peta jalan untuk integrasi ke, katakanlah, Firefox, dan jika tidak, untuk alasan apa (selain interoperabilitas) harus JavaScript satu-satunya bahasa yang didukung pada platform browser?
Saya sudah menggunakan jQuery dan saya juga membaca "javascript: bagian yang baik". Memang sarannya bagus, tapi yang tidak bisa saya pahami adalah: mengapa hanya javascript? Di sisi server (platform os-favorit Anda), kami dapat memanipulasi pohon DOM dengan setiap bahasa, bahkan fortran. Mengapa sisi klien (platform browser) hanya mendukung javascript?
sumber
Jawaban:
Masalah dengan javascript bukan bahasa itu sendiri - itu adalah bahasa prototipe dan dinamis yang sangat baik. Jika Anda berasal dari latar belakang OO, ada sedikit kurva pembelajaran, tetapi itu bukan kesalahan bahasa.
Kebanyakan orang beranggapan bahwa Javascript seperti Java karena memiliki sintaksis yang sama dan nama yang mirip, tetapi sebenarnya itu jauh lebih mirip cisp. Ini sebenarnya cukup cocok untuk manipulasi DOM.
Masalah sebenarnya adalah bahwa itu dikompilasi oleh browser, dan itu berarti ia bekerja dengan cara yang sangat berbeda tergantung pada klien.
Tidak hanya DOM yang sebenarnya berbeda tergantung pada browser, tetapi ada perbedaan besar dalam kinerja dan tata letak.
Edit klarifikasi berikut dalam pertanyaan
Misalkan beberapa bahasa yang ditafsirkan didukung - Anda masih memiliki masalah yang sama. Berbagai browser akan tetap bermasalah dan memiliki DOM yang berbeda.
Selain itu, Anda harus memiliki juru bahasa yang terpasang di browser atau dipasang sebagai plug in (yang dapat Anda periksa sebelum menyajikan halaman) untuk setiap bahasa. Butuh waktu lama untuk mendapatkan Javascript yang konsisten.
Anda tidak dapat menggunakan bahasa yang dikompilasi dengan cara yang sama - maka Anda memperkenalkan yang dapat dieksekusi yang tidak dapat dengan mudah diteliti apa yang dilakukannya. Banyak pengguna akan memilih untuk tidak menjalankannya.
OK, jadi bagaimana dengan semacam kotak pasir untuk kode yang dikompilasi? Kedengarannya seperti Java Applet bagi saya. Atau ActionScript di Flash. Atau C # di Silverlight.
Bagaimana dengan semacam standar IL? Itu lebih potensial. Kembangkan dalam bahasa apa pun yang Anda inginkan dan kemudian kompilasikan ke IL, yang oleh browser lalu JIT.
Kecuali, Javascript sudah agak seperti itu IL - lihat saja GWT . Ini memungkinkan Anda menulis program di Jawa, tetapi mendistribusikannya sebagai HTML dan JS.
Edit klarifikasi lebih lanjut berikut yang dipertanyakan
Javascript bukan, atau lebih tepatnya bukan, satu-satunya bahasa yang didukung oleh browser: kembali di zaman Internet Explorer gelap Anda dapat memilih antara Javascript atau VBScript untuk dijalankan di IE. Secara teknis IE bahkan tidak menjalankan Javascript - itu menjalankan JScript (terutama untuk menghindari harus membayar Sun untuk kata java , Oracle masih memiliki nama Javascript ).
Masalahnya adalah bahwa VBScript adalah milik Microsoft, tetapi juga bahwa VBScript tidak begitu baik. Sementara Javascript menambahkan fungsionalitas dan mendapatkan alat debugging tingkat atas di browser lain (seperti FireBug) VBScript tetap hanya untuk IE dan cukup banyak yang tidak dapat di-debuggable (dev tools di IE4 / 5/6 tidak ada). Sementara itu VBScript juga berkembang menjadi alat skrip yang cukup kuat di OS, tetapi tidak ada fitur yang tersedia di browser (dan ketika itu mereka menjadi lubang keamanan besar).
Masih ada beberapa aplikasi internal perusahaan di luar sana yang menggunakan VBScript (dan beberapa mengandalkan lubang keamanan itu), dan mereka masih menjalankan IE7 (mereka hanya menghentikan IE6 karena MS akhirnya mematikannya).
Mendapatkan Javascript ke keadaan saat ini telah menjadi mimpi buruk dan telah memakan waktu 20 tahun. Itu masih tidak memiliki dukungan yang konsisten, dengan fitur bahasa (ditentukan pada tahun 1999) masih hilang dari beberapa browser dan banyak shims yang diperlukan.
Menambahkan bahasa alternatif untuk menafsirkan di browser menghadapi dua masalah utama:
Membuat semua vendor browser menerapkan standar bahasa baru - sesuatu yang mereka masih belum berhasil untuk Javascript dalam 20 tahun.
Bahasa kedua berpotensi melemahkan dukungan yang sudah Anda miliki, memungkinkan (misalnya) IE untuk memiliki dukungan Javascript tingkat kedua tetapi VBScript yang hebat (lagi). Saya benar-benar tidak ingin menulis kode dalam berbagai bahasa untuk browser yang berbeda.
Perlu dicatat bahwa Javascript belum selesai - masih berevolusi menjadi lebih baik di peramban baru. Versi terbaru adalah beberapa tahun sebelum implementasi browser dan mereka sedang bekerja pada yang berikutnya.
sumber
Kompilasi ke Javascript
Untuk saat ini, menggunakan bahasa yang mengkompilasi ke Javascript tampaknya menjadi satu-satunya cara realistis untuk mencapai semua platform saat menulis kode yang lebih cerdas, dan ini akan tetap berlaku untuk waktu yang lama. Dengan penawaran baru, akan selalu ada alasan mengapa satu atau lebih vendor tidak akan terburu-buru mengirimkannya.
(Tapi saya tidak benar-benar berpikir ini adalah masalah. Javascript telah dioptimalkan dengan baik sekarang. Kode mesin juga tidak aman jika ditulis dengan tangan, tetapi berfungsi dengan baik sebagai target kompilasi dan bahasa eksekusi.)
Begitu banyak pilihan
Ada kumpulan bahasa yang terus berkembang yang mengkompilasi ke Javascript. Daftar yang cukup lengkap dapat ditemukan di sini:
Penting
Saya akan menyebutkan beberapa yang menurut saya patut diperhatikan (sementara tidak diragukan mengabaikan beberapa permata yang tidak saya sadari):
Spider muncul di 2016. Ia mengklaim untuk mengambil ide terbaik dari Go, Swift, Python, C # dan CoffeeScript. Ini bukan typesafe, tetapi memang memiliki beberapa fitur keselamatan kecil .
Elm : Haskell mungkin bahasa paling cerdas dari semuanya, dan Elm adalah varian dari Haskell untuk Javascript. Ini sangat sadar dan ringkas, dan menawarkan Pemrograman Fungsional Reaktif sebagai alternatif yang rapi untuk templat reaktif atau spaghetti MVC. Tapi itu mungkin cukup mengejutkan bagi programmer prosedural .
Google's Go ditujukan untuk keringkasan, kesederhanaan, dan keamanan. Kode Go dapat dikompilasi ke dalam Javascript oleh GopherJS .
Dart adalah upaya Google selanjutnya untuk menggantikan Javascript. Ini menawarkan antarmuka dan kelas abstrak melalui sintaks seperti Java / C dengan mengetik opsional.
Haxe seperti FlashScript ActionScript, tetapi dapat menargetkan beberapa bahasa sehingga kode Anda dapat digunakan kembali dalam program Java, C, Flash, PHP dan Javascript. Menawarkan objek yang aman dan dinamis.
Opalang menambahkan gula sintaksis ke Javascript untuk menyediakan akses basis data langsung , kelanjutan pintar, pengecekan tipe dan membantu pemisahan klien / server. (Terikat ke NodeJS dan MongoDB.)
GorillaScript , "bahasa kompilasi-ke-JavaScript yang dirancang untuk memberdayakan pengguna saat berusaha mencegah beberapa kesalahan umum." mirip dengan Coffeescript tetapi lebih komprehensif, menyediakan banyak fitur tambahan untuk meningkatkan keamanan dan mengurangi pola pelat berulang.
LiteScript berada di suatu tempat di antara Coffeescript dan GorillaScript. Menawarkan sintaks async / yield untuk panggilan balik "inline", dan memeriksa kesalahan ketik variabel.
Microsoft's TypeScript adalah superset kecil dari Javascript yang memungkinkan Anda menempatkan pembatasan tipe pada argumen fungsi, yang mungkin menangkap beberapa bug. Demikian pula, BetterJS memungkinkan Anda untuk menerapkan pembatasan, tetapi dalam Javascript murni, baik dengan menambahkan panggilan tambahan atau dengan menentukan jenis dalam komentar JSDoc. Dan sekarang Facebook telah menawarkan Flow yang juga melakukan inferensi tipe.
LiveScript adalah spin-off dari Coffeescript yang populer karena singkatnya tetapi tidak terlihat sangat mudah dibaca oleh saya. Mungkin bukan yang terbaik untuk tim.
Bagaimana memilih?
Saat memilih bahasa alternatif, ada beberapa faktor yang perlu dipertimbangkan :
Jika pengembang lain bergabung dengan proyek Anda di masa depan, berapa lama waktu yang dibutuhkan untuk meningkatkan kecepatan dan mempelajari bahasa ini, atau seberapa besar peluang yang mereka ketahui?
Apakah bahasa tersebut memiliki fitur yang terlalu sedikit (kode akan tetap penuh dengan boilerplate) atau fitur yang terlalu banyak (akan membutuhkan waktu lama untuk dikuasai, dan sampai saat itu beberapa kode yang valid mungkin tidak dapat diuraikan)?
Apakah ada fitur yang Anda butuhkan untuk proyek Anda? (Apakah proyek Anda perlu pengecekan tipe dan antarmuka? Apakah perlu kelanjutan cerdas untuk menghindari neraka panggilan balik bersarang? Apakah ada banyak reaktivitas? Mungkin perlu menargetkan lingkungan lain di masa depan?)
Masa depan...
Jeff Walker telah menulis serangkaian posting blog yang memancing pemikiran tentang "masalah Javascript", termasuk mengapa ia berpikir baik TypeScript , maupun Dart maupun Coffeescript menawarkan solusi yang memadai. Dia menyarankan beberapa fitur yang diinginkan untuk bahasa yang lebih baik dalam kesimpulannya .
sumber
Iya dan tidak. Ada alternatif di luar sana yang disebut Dart oleh Google yang mengkompilasi ke JavaScript dan seperti jQuery ia mencoba untuk membuat manipulasi DOM sedikit lebih mudah. Mungkin menyenangkan untuk bereksperimen, memeriksanya.
Lihat juga
sumber
Memang benar bahwa Javascript pada satu titik terkenal sulit untuk dihadapi tetapi komunitas pengembangan web telah datang jauh sejak saat itu. Sebagai gantinya, saya akan mendorong Anda untuk melihat jQuery . Sangat mudah dan abstrak semua masalah.
Dan benar-benar tidak ada alternatif yang bisa digunakan. Flash muncul di pikiran, tetapi itu juga skrip ECMA dan itu mungkin lebih dari membunuh untuk sebagian besar hal.
sumber
Jangka pendek, saya akan menggunakan hal-hal seperti jQuery untuk menyembunyikan ketidakcocokan browser. Jangka panjang, teknologi seperti Silverlight atau Adobe AIR dapat menjadikan ini ladang ranjau yang sangat berbeda (tapi masih ranjau) di masa depan.
sumber
Doug Crockford memberikan ceramah kepada Google yang merinci bagian buruk dan baik dari JavaScript dan masa depannya. Ini sebenarnya tidak banyak berubah sama sekali sejak 1999 - yang dapat dikatakan sebagai hal yang baik (hampir semua browser dapat menjalankan kode yang sama selama Anda mengetahui keterbatasan mereka) dan Doug menunjukkan di mana bagian-bagian yang baik sebagian besar kesalahpahaman yang ternyata sangat kuat.
Untuk manipulasi DOM, lihat JQuery sebagai pustaka sisi klien yang menggantikan sebagian besar DOM API yang mengerikan dengan operasi yang sulit untuk ditulis ke bit kode yang cukup elegan yang lebih mudah untuk ditulis.
sumber
Jika Anda berpikir bahwa JavaScript memiliki masalah mendalam, saya sarankan buku Doug Crockford, JavaScript: The Good Parts . (Atau Google untuk "Crockford JavaScript" untuk menemukan beberapa presentasi video yang telah ia lakukan.) Crockford membuat sketsa subset dan rangkaian praktik yang aman, dan secara khusus mencantumkan beberapa bagian bahasa yang harus dihindari.
Saya tidak mengetahui rencana untuk mengganti JavaScript sebagai cara de facto memanipulasi DOM. Jadi sebaiknya belajar menggunakannya dengan aman dan baik.
sumber
Dalam hal sisi klien, Javascript adalah satu-satunya cara untuk memanipulasi DOM. Dalam hal sisi server ada banyak cara.
sumber
Internet Explorer mendukung bahasa scripting pluggable, meskipun satu-satunya yang andal disertakan dengan IE selain JScript adalah VBScript.
Sejauh yang saya lihat, tampaknya ada semacam bias umum terhadap bahasa dinamis di browser, dan JavaScript tampaknya memenuhi kebutuhan ini cukup memadai sehingga efek jaringan membuat bahasa lain menjadi non-starter. Bahasa ini sebenarnya cukup kuat, meskipun penerapannya di browser meninggalkan banyak yang harus diinginkan.
sumber
Jika Anda ingin membatasi pelanggan / pengunjung Anda ke browser tertentu, dan mungkin bersedia meminta mereka untuk menginstal plug-in, Anda dapat melihat MS Silverlight - ikhtisar yang dapat dibaca ada di wikipedia . Dengan Silverlight 2, Anda dapat menjalankan, sisi klien, kode yang Anda tulis dalam C #, IronPython, IronRuby, VB.NET, dll; bebas Moonlight tiruan dari Silverlight, dari proyek Mono, janji-janji untuk membawa fungsi yang sama untuk Linux.
Dalam praktiknya, sebagian besar pengembang aplikasi dan situs web lebih memilih untuk menjangkau audiens yang lebih luas daripada yang dapat disampaikan Silverlight (dan akhirnya Moonlight) - yang berarti tetap menggunakan Javascript, atau mungkin Flash (yang menggunakan bahasa pemrograman yang sama, Actionscript).
Jadi, mendapatkan mindshare, adopsi, dan daya tarik yang substansial untuk hal lain terbukti menjadi perjuangan yang berat bahkan untuk Microsoft dengan kelompok besar insinyur dan anggaran pemasaran dan proyek perangkat lunak bebas di samping (untuk mengurangi kekhawatiran tentang penguncian hak milik) ) - yang dapat membantu menjelaskan mengapa ada sedikit minat, misalnya dari pihak Mozilla Foundation, dalam mendorong ke arah tujuan tersebut. "Terlepas dari interoperabilitas", Anda berkata: tetapi yang jelas masalah interoperabilitas adalah THE biggie di sini, mengingat apa yang kami amati dengan kemajuan Silverlight ...
sumber
Seperti yang sudah dikatakan, Anda memiliki Flash (ActionScript, yang merupakan bahasa turunan dari Javascript) dan Silverlight / Moonlight (IronPython, IronRuby, JScript, VBScript, C #) yang dapat berjalan di browser melalui plugin (yang pertama lebih banyak di mana-mana) .
Ada juga alternatif lain jika Anda suka Ruby: HotRuby , ini adalah implementasi ruby di javascript yang akan berjalan di browser. Ini belum terlalu dewasa, tetapi Anda bisa melihatnya.
sumber
Satu hal yang belum saya lihat disebutkan (oh, saya melihat Alcides menyebutkan HotRuby ketika saya sedang menulis dan Nosredna menyebutkan GWT dan Script #) dan ingin membuang ada beberapa implementasi [masukkan bahasa] -on- JavaScript (mis. Penerjemah yang memungkinkan Anda untuk mengkonversi Ruby , Python , C # , Java , Obj-J / Cappuccino [mirip dengan Obj-C / Cocoa] atau Memproses [untuk Kanvas] ke JavaScript baik pada klien atau sebelum penyebaran [dan beberapa yang juga menampilkan berbagai perpustakaan abstraksi]). Tentu saja ada overhead kinerja jika sedang diterjemahkan pada klien, tetapi jika Anda lebih nyaman dengan bahasa lain itu akan memberi Anda fleksibilitas.
Namun secara pribadi, saya sarankan belajar untuk mencintai JavaScript. Ini adalah bahasa yang sangat baik, kuat, dan sangat elegan begitu Anda mengetahuinya. Saya menghadapi dilema yang berlawanan, mengejar sedikit untuk memiliki solusi JavaScript / DOM sisi server yang mampu memenuhi semua kebutuhan saya. / Pendapat yang tidak diminta
sumber
Tidak. JavaScript itu, tapi itu akan berkembang. Versi selanjutnya adalah "JavaScript Harmony," dan Anda dapat mempelajari lebih lanjut jika Anda Google itu.
Kadang-kadang seseorang menyarankan untuk menempatkan penerjemah kode byte ke dalam peramban di samping JavaScript. Mungkin tidak akan terjadi, setidaknya untuk sementara.
Saya kebetulan suka JavaScript. Tetapi ada solusi lain, termasuk GWT, yang mengkompilasi Java ke JavaScript dan Script #, yang mengkompilasi C # ke JavaScript.
sumber
Jquery (masih javascript tapi) itu akan sangat membantu Anda mereka memiliki dukungan untuk hampir semua browser dan itu tidak terlalu sulit untuk dipelajari :)
sumber
JavaScript adalah bahasa Inggris web. Bahasa Inggris secara historis menyebar karena memiliki angkatan laut yang kuat menaklukkan berbagai negara. Ini sebanding dengan perusahaan besar yang menaklukkan web dengan JavaScript. Bahasa ini dikuasai bersama dari berbagai sumber Eropa (bahasa Yunani, Latin, Jerman, Perancis bahkan beberapa kata Cina dan India). JavaScript meminjam banyak konsep selama bertahun-tahun dari bahasa lain (struktural, OO, fungsional). Bahasa Inggris dituturkan di berbagai tempat dengan sedikit variasi dalam dialek dan aksen, yang dapat membuat pemahaman menjadi sulit. Sama seperti JavaScript memiliki browser yang berbeda menafsirkannya sedikit berbeda.
Meskipun bahasa Inggris mudah dipelajari pada awalnya, ia memiliki pengucapan yang sangat tidak konsisten dan lebih banyak pengecualian daripada aturan. Sama seperti JavaScript, selalu ada di sana untuk menawarkan kejutan.
Terlepas dari aksen yang berbeda, JavaScript adalah lingua franca web. Sama seperti Anda mungkin bukan bahasa Inggris dan menulis di sini dalam bahasa Inggris, setiap browser web memiliki tingkat pemahaman bahasa Inggris tertentu. IE6 seperti orang yang mengatakan dalam resume-nya bahwa dia fasih, tetapi hanya mengikuti kursus dua minggu tentang bahasa Inggris sebagai bahasa asing.
Ada upaya untuk menggantikan bahasa Inggris sebagai bahasa utama dunia, misalnya Esperanto. Tetapi semuanya gagal, karena kebanyakan orang di dunia berbicara sedikit bahasa Inggris. Dengan cara yang sama akan sulit untuk memperkenalkan alternatif yang lebih baik ke JavaScript.
sumber
Saya tidak berpikir Javascript akan diganti dalam waktu dekat. Untuk pendekatan yang sama sekali berbeda dengan klien kaya, Anda mungkin ingin menyelidiki Flex, yang merupakan teknologi berbasis Flash.
sumber
Mungkin sesuatu seperti haxe (lihat haxe.org) dapat membantu Anda. Ini adalah bahasa yang tampaknya lebih bersih daripada JavaScript dan dapat dikompilasi ke JavaScript, sehingga dapat dijalankan di dalam browser.
Saya tahu ini bukan jawaban langsung untuk pertanyaan Anda, tetapi saya pikir ini mungkin menarik bagi Anda.
sumber
Banyak orang mengerti bahwa Javascript bukan bahasa terbaik dan tercantik yang pernah ada. Namun, saat ini didukung oleh browser, dan karenanya akan sangat sulit untuk memperkenalkan bahasa yang berbeda. Kami tidak membutuhkan perang browser lain.
Ini menjelaskan mengapa saya tahu tidak ada rencana untuk beralih ke bahasa sisi klien yang berbeda.
Tapi saya pikir Javascript tidak terlalu buruk jika Anda mulai berpikir tentang model DOM dan bagaimana cara kerjanya. Banyak hal yang berantakan dengan JS adalah hasil dari cara model DOM bekerja.
sumber