Saya telah mendengar pernyataan bahwa Python akan terlalu lambat untuk digunakan di browser.
Saya rasa Javascript hanya unggul dalam aspek ini karena perusahaan seperti Google yang membutuhkannya cepat (dan membuatnya cepat) karena mereka membutuhkannya untuk bertahan hidup, tetapi saya bisa saja salah.
Apakah ada perbedaan dalam bagaimana Python dan Javascript dirancang yang berdampak pada bagaimana mereka (akan) tampil di browser?
Karena sampai sekarang tidak ada implementasi Python sisi klien, pertanyaan saya berasal dari pernyataan yang dibuat seseorang, jadi mungkin itu ada hubungannya dengan bahasa itu sendiri (walaupun saya tidak percaya itu).
javascript
python
browser
client-side
Profpatsch
sumber
sumber
would
?Jawaban:
Untuk memulainya, kita harus membuat perbedaan yang jelas antara bahasa dan implementasi . Bahasa adalah hal yang abstrak, implementasi adalah hal konkret yang dapat diukur kinerjanya. Sebagai contoh, Lisp pernah dianggap terlalu tidak efisien untuk penggunaan praktis tetapi kompiler terus jatuh tempo dan, akhirnya, perangkat keras khusus dikembangkan untuk itu; pada satu titik di tahun 1980-an itu adalah platform pengembangan pilihan untuk pengembangan workstation berkinerja tinggi.
Yang mengatakan, jawaban paling sederhana adalah bahwa implementasi Javascript cepat seperti Google V8 meniup implementasi standar Python (CPython) keluar dari air . V8 adalah mesin virtual yang sangat dioptimalkan dengan JITer yang luar biasa cepat sedangkan CPython adalah VM yang cukup sederhana sebagai perbandingan. Ada implementasi Python dengan JIT tetapi itu masih sekitar 5-6x lebih cepat.
Lima tahun yang lalu itu akan menjadi cerita yang berbeda. Browser memiliki implementasi Javascript sederhana karena kecepatan bukan masalah karena tidak ada yang membangun perangkat lunak 'nyata' dengan itu dan Python akan sama, jika tidak lebih cepat.
sumber
Di masa lalu web, ketika applet java di mana satu
-satunya bentukutamadari konten interaktif sisi klien orang menyadari bahwa perlu ada cara untuk mendapatkan formulir pada halaman web untuk dapat berinteraksi dengan applet pada halaman web.Dari ini, bahasa scripting untuk menautkan java applet ke halaman web dibuat dengan nama ... javascript.
Seseorang dapat melihat sisa-sisa warisan ini dengan pertanyaan SO seperti [ 1 ], [ 2 ], [ 3 ] - dan dua dokumen resmi: Meminta Kode JavaScript Dari Applet dan Memunculkan Metode Applet Dari Kode JavaScript
Dengan bahasa yang tersedia, browser pada saat itu (Netscape menjadi yang utama) membuat javascript tersedia sebagai keunggulan kompetitif (javascript dirancang di Netscape - Netscape adalah server sisi javascript pertama dengan servernya kembali pada '94 - hampir dua dekade sebelum node .js). Browser lain mengikutinya. Orang-orang menulis halaman yang menggunakan javascript, upaya lain pada skrip sisi klien akan berarti halaman yang sepenuhnya tidak dapat dipertukarkan antara hal-hal yang berfungsi dan hal-hal yang tidak - atau duplikasi kode (inilah blok {masukkan bahasa di sini} yang melakukan ini untuk non-javascript browser dan di sini adalah blok javascript untuk semua orang).
Karena Netscape adalah browser yang dominan untuk suatu periode, javascript mulai berlaku. Sementara warisan Netscape hilang pada catatan kaki dari file sumber Mozilla, javascript tetap hidup dan tidak ada yang bisa melewati tempatnya.
Masalahnya masih ada untuk bahasa skrip slide klien lainnya. Javascript didukung di setiap browser. Jika seseorang membuat browser yang mendukung python (misalnya) daripada javascript, itu tidak akan dapat menggunakan sebagian besar situs web. Selain itu, kecuali browser itu bisa mendapatkan bagian yang signifikan dari lalu lintas browser, perancang web tidak ingin membuat dua set halaman dengan bahasa skrip yang berbeda untuk halaman yang sama.
Orang mungkin mencoba membuat plugin skrip python untuk beberapa browser yang mengaktifkan skrip python pada halaman ... mirip dengan cara kerja vrml hari ini. Tetapi kecuali jika Anda telah mendengar dan melihat halaman web yang menggunakan vrml, satu kemungkinan akan digunakan untuk halaman web lain untuk bahasa skrip lain.
sumber
Saya tidak berpikir Python akan terlalu lambat sama sekali. Tidak ada apa-apa tentang bahasa yang mencegahnya berjalan cukup cepat untuk setidaknya mencocokkan JavaScript. Ini dapat dikompilasi ke JavaScript, jadi, jika tidak ada yang lain, Anda dapat memasukkan kompiler di browser dan hanya berpotensi menambah waktu pemuatan halaman.
UPDATE: Silakan lihat komentar di bawah ini membahas mengapa kompilasi Python ke JS akan jauh lebih mahal daripada tersirat di sini.
Masalahnya adalah mencoba meyakinkan vendor browser dan W3C untuk terlebih dahulu memilih Python, lebih dari Ruby atau bahasa skriping bagus lainnya, kemudian menentukan subset standar, karena mereka tidak dapat mengizinkan panggilan sistem dan sebagainya, dan kemudian mengimplementasikannya dengan baik, sementara itu masih mendukung JavaScript. Itu tidak akan terjadi, tetapi jika itu terjadi, saya ragu kecepatan akan menjadi masalah serius.
sumber
a = something(); frobincate(a); return quux
danif condition: react()
masing-masing satu baris. Dan level indentasi hanya membutuhkan n spasi, bukan n * 4 spasi.Saya pikir Python memiliki mesin virtual sendiri. Saya tidak punya banyak pengalaman dengan Python, tapi saya tidak melihat alasan mengapa ia tidak berkinerja sebaik mesin JavaScript yang tidak dioptimalkan.
Beberapa pemikiran acak:
(1) Anda mungkin dapat menjalankan Python secara lokal melalui applet Java menggunakan Jython. Bagian sulit yang saya lihat di sini adalah applet sangat terbatas, jadi Anda mungkin perlu memodifikasi Jython agar sesuai dengan batasan akses. Misalnya, jika ia menulis ke file log, Anda mungkin perlu menghapus kode logging. Applet tidak perlu terlihat secara nyata.
(2) Seseorang dapat membuat "compiler" / konverter Python-ke-JavaScript. Ini akan banyak pekerjaan.
sumber
Someone could build a Python-to-JavaScript "compiler"/converter
Yah, seseorang sudah melakukannya .Brython
bekerja sangat cepat, setidaknya untuk bagian yang agak terisolasi pada halaman (interaksi rendah denganDOM tree
).Itu tergantung pada implementasi bahasa dan belum tentu bahasa itu sendiri. Kebanyakan penerjemah JavaScript jauh lebih cepat daripada hampir semua implementasi Python.
Ini tidak berarti bahwa bahasa Python tidak dapat digunakan pada kecepatan yang hampir sama dengan JavaScript. Opal mengimplementasikan hampir seluruh bahasa Ruby dan pustaka standar di browser dengan mengkompilasi kode Ruby ke dalam kode JavaScript yang ditutup. Mengesampingkan overhead termasuk perpustakaan Opal, kecepatannya jauh lebih dekat dengan JavaScript lurus daripada penerjemah Ruby lainnya yang saya tahu.
Saya tidak tahu apakah ada Python yang setara dengan Opal, tetapi proyek semacam itu mungkin akan berarti bahwa jawaban untuk pertanyaan Anda adalah "tidak". Dengan meningkatnya penggunaan JavaScript sebagai "bahasa rakitan untuk web", tidak akan mengejutkan saya jika itu akan digunakan lebih dan lebih sebagai platform untuk bahasa lain, terutama ketika daya komputasi seluler meningkat dan biaya tambahan untuk memiliki bahasa diimplementasikan dalam JavaScript menjadi semakin lalai.
EDIT: Berikut adalah daftar implementasi Python untuk browser yang dikompilasi / dijalankan pada JavaScript.
https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js#python
Dan jika Anda tertarik, Anda dapat melihat Opal, yang sangat saya sukai.
http://opalrb.org/
Karena saya ragu bahwa peramban akan datang dengan dukungan untuk penerjemah terpisah, penyusun seperti itu mungkin adalah cara masa depan dalam hal menggunakan bahasa selain JavaScript. Bahkan sekarang, Anda akan mendapatkan kinerja yang sebanding di sebagian besar wilayah. Namun ini adalah pendapat saya, jadi ingatlah itu.
sumber
Bahkan ketika Anda mengajukan pertanyaan ini, sudah ada sejumlah implementasi python yang tersedia di javascript yang dapat digunakan di halaman web hari ini.
Lihat http://www.skulpt.org/ atau http://www.brython.info/ sebagai permulaan.
Performanya tampaknya tidak terlalu buruk, tetapi Anda harus mengujinya sendiri dan mengetahuinya.
sumber
Python adalah bahasa "konsol", yang berjalan di server
Javascript adalah bahasa "browser", yang berjalan di klien
Dengan demikian, mereka tidak bersaing secara langsung
... tentu saja ada node.js dan mungkin plugin browser python, tapi kemudian lebih merupakan pertanyaan tentang kinerja tentang implementasi tertentu.
Selain itu, untuk sebagian besar aplikasi python akan baik-baik saja, kecuali jika Anda harus melakukan semacam perhitungan yang luas dan menekan siklus CPU.
Sebagai catatan terakhir, python dan javascript memiliki banyak kesamaan. Karena sifatnya yang dinamis, keduanya harus ditafsirkan pada saat runtime dan tidak dapat dikompilasi sekuat bahasa yang diketik statis. Karena itu, saya menganggap kinerja yang dapat dicapai mereka akan serupa.
sumber
jsc
memungkinkan Anda bekerja dengan javascript sebagai konsol, sama seperti yang akan Anda dapatkan jika mereka mengetikpython
di konsol.