Saat ini Google App Engine mendukung Python & Java. Dukungan Java kurang matang. Namun, Java tampaknya memiliki daftar perpustakaan yang lebih panjang dan khususnya dukungan untuk bytecode Java terlepas dari bahasa yang digunakan untuk menulis kode itu. Bahasa mana yang akan memberikan kinerja yang lebih baik dan lebih banyak kekuatan? Mohon saran. Terima kasih!
Edit: http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1
Sunting: Dengan "kekuatan" yang saya maksud adalah pengembangan yang lebih baik dan penyertaan perpustakaan yang tersedia di luar kerangka kerja. Python hanya mengizinkan pustaka Python murni.
Jawaban:
Saya bias (menjadi ahli Python tetapi cukup berkarat di Jawa) tapi saya pikir runtime Python dari GAE saat ini lebih maju dan lebih berkembang daripada runtime Java - yang pertama memiliki satu tahun ekstra untuk berkembang dan matang, setelah semua .
Bagaimana hal-hal akan berjalan maju tentu saja sulit untuk diprediksi - permintaan mungkin lebih kuat di sisi Jawa (terutama karena itu bukan hanya tentang Jawa, tetapi bahasa lain juga bertengger di atas JVM, jadi itu adalah cara untuk menjalankan misalnya PHP atau kode Ruby di App Engine); Namun tim Mesin App Python memang memiliki keuntungan memiliki Guido van Rossum, penemu Python dan insinyur yang luar biasa kuat.
Dalam hal fleksibilitas, mesin Java, seperti yang telah disebutkan, memang menawarkan kemungkinan menjalankan bytecode JVM yang dibuat oleh berbagai bahasa, bukan hanya Java - jika Anda berada di toko multi-bahasa yang positif cukup besar. Begitu juga sebaliknya, jika Anda membenci Javascript tetapi harus menjalankan beberapa kode di peramban pengguna, Java GWT (menghasilkan Javascript untuk Anda dari pengkodean tingkat Java) jauh lebih kaya dan lebih maju daripada alternatif sisi Python (dalam praktiknya, jika Anda memilih Python, Anda akan menulis sendiri beberapa JS untuk tujuan ini, sementara jika Anda memilih Java GWT adalah alternatif yang dapat digunakan jika Anda tidak suka menulis JS).
Dalam hal perpustakaan, ini cukup mudah - JVM cukup terbatas (tidak ada utas, tidak ada pemuat kelas khusus, tidak ada JNI, tidak ada DB relasional) untuk menghambat penggunaan kembali yang sederhana dari perpustakaan Java yang ada sebanyak, atau lebih, daripada Python yang ada perpustakaan sama-sama terhambat oleh pembatasan serupa pada runtime Python.
Dalam hal kinerja, saya pikir ini adalah pekerjaan biasa, meskipun Anda harus melakukan tolok ukur pada tugas Anda sendiri - jangan mengandalkan kinerja implementasi JVM berbasis JIT yang sangat dioptimalkan dengan diskon waktu startup dan jejak kaki memori yang besar, karena mesin aplikasi lingkungan sangat berbeda (biaya awal akan sering dibayar, karena instance aplikasi Anda dimulai, dihentikan, dipindahkan ke host yang berbeda, dll, semua benar-benar untuk Anda - peristiwa seperti itu biasanya jauh lebih murah dengan lingkungan runtime Python daripada dengan JVM).
Situasi XPath / XSLT (menjadi eufemistik ...) tidak sepenuhnya sempurna di kedua sisi, huh, meskipun saya pikir ini mungkin tidak terlalu buruk di JVM (di mana, tampaknya, subset besar dari Saxon dapat dibuat untuk dijalankan , dengan hati-hati). Saya pikir itu layak membuka masalah pada halaman Appengine Issues dengan XPath dan XSLT dalam judul mereka - saat ini hanya ada masalah meminta perpustakaan tertentu, dan itu rabun: Saya tidak begitu peduli BAGAIMANA XPath / XSLT yang baik diimplementasikan, untuk Python dan / atau untuk Java, selama saya bisa menggunakannya. (Perpustakaan tertentu dapat memudahkan migrasi kode yang ada, tapi itu kurang penting daripada mampu melakukan tugas-tugas seperti "cepat menerapkan transformasi XSLT" dengan BEBERAPA cara! -). Saya tahu saya akan membintangi masalah seperti itu jika diutarakan dengan baik (terutama dengan cara yang mandiri dalam bahasa).
Last but not least: ingat bahwa Anda dapat memiliki versi aplikasi yang berbeda (menggunakan datastore yang sama) beberapa di antaranya diimplementasikan dengan runtime Python, beberapa dengan runtime Java, dan Anda dapat mengakses versi yang berbeda dari "default / aktif "satu dengan URL eksplisit. Jadi Anda bisa menggunakan kode Python dan Java (dalam versi berbeda dari aplikasi Anda) menggunakan dan memodifikasi penyimpanan data yang sama, memberi Anda lebih banyak fleksibilitas (walaupun hanya satu yang akan memiliki URL "bagus" seperti foobar.appspot.com - yang mungkin penting hanya untuk diakses oleh pengguna interaktif di browser, saya kira ;-).
sumber
Tonton aplikasi ini untuk perubahan kinerja Python dan Java:
http://gaejava.appspot.com/ (sunting: permintaan maaf, tautan rusak sekarang. Tetapi para yang masih berlaku saat saya melihatnya berjalan terakhir)
Saat ini, Python dan menggunakan API tingkat rendah di Jawa lebih cepat daripada JDO di Jawa, untuk pengujian sederhana ini . Setidaknya jika mesin yang mendasarinya berubah, aplikasi itu harus mencerminkan perubahan kinerja.
sumber
Berdasarkan pengalaman menjalankan VMs ini pada platform lain, saya akan mengatakan bahwa Anda mungkin akan mendapatkan lebih banyak kinerja mentah dari Jawa daripada Python. Namun, jangan meremehkan nilai jual Python: Bahasa Python jauh lebih produktif dalam hal baris kode - kesepakatan umum adalah bahwa Python membutuhkan sepertiga kode program Java yang setara, sambil tetap sebagai atau lebih mudah dibaca. Manfaat ini dikalikan dengan kemampuan untuk menjalankan kode segera tanpa langkah kompilasi yang eksplisit.
Sehubungan dengan perpustakaan yang tersedia, Anda akan menemukan bahwa banyak perpustakaan runtime Python yang luas bekerja di luar kotak (seperti halnya Java). Kerangka kerja Django Web yang populer ( http://www.djangoproject.com/ ) juga didukung di AppEngine.
Mengenai 'kekuatan', sulit untuk mengetahui apa yang Anda maksud, tetapi Python digunakan dalam banyak domain berbeda, terutama Web: YouTube ditulis dalam Python, seperti halnya Sourceforge (pada minggu lalu).
sumber
Juni 2013: Video ini adalah jawaban yang sangat bagus oleh seorang insinyur google:
http://www.youtube.com/watch?v=tLriM2krw2E
TLDR; adalah:
sumber
Sebuah pertanyaan penting untuk dipertimbangkan dalam memutuskan antara Python dan Java adalah bagaimana Anda akan menggunakan datastore dalam setiap bahasa (dan sebagian besar sudut lain terhadap pertanyaan asli telah dibahas dengan cukup baik dalam topik ini).
Untuk Java , metode standar adalah menggunakan JDO atau JPA. Ini bagus untuk portabilitas tetapi tidak terlalu cocok untuk datastore.
API tingkat rendah tersedia tetapi ini terlalu rendah untuk penggunaan sehari-hari - lebih cocok untuk membangun perpustakaan pihak ketiga.
Untuk Python ada API yang dirancang khusus untuk menyediakan aplikasi dengan akses yang mudah namun kuat ke datastore. Ini bagus kecuali bahwa itu tidak portabel sehingga mengunci Anda ke GAE.
Untungnya, ada solusi yang dikembangkan untuk kelemahan yang terdaftar untuk kedua bahasa.
Untuk Java , API tingkat rendah sedang digunakan untuk mengembangkan perpustakaan persistensi yang jauh lebih cocok untuk datastore daripada JDO / JPA (IMO). Contohnya termasuk proyek Siena , dan Objectify .
Saya baru-baru ini mulai menggunakan Objectify dan menemukannya sangat mudah digunakan dan cocok untuk datastore, dan popularitasnya yang semakin meningkat telah diterjemahkan ke dalam dukungan yang baik. Misalnya, Objectify secara resmi didukung oleh layanan Cloud Endpoints baru Google. Di sisi lain, Objectify hanya berfungsi dengan datastore, sementara Siena 'terinspirasi' oleh datastore tetapi dirancang untuk bekerja dengan berbagai database SQL dan datastore NoSQL.
Untuk Python , ada upaya yang dilakukan untuk memungkinkan penggunaan API datastore Python GAE dari GAE. Salah satu contoh adalah backend SQLite yang dirilis Google untuk digunakan dengan SDK, tapi saya ragu mereka bermaksud ini untuk tumbuh menjadi sesuatu yang siap produksi. Proyek TyphoonAE mungkin memiliki lebih banyak potensi, tetapi saya juga berpikir itu belum siap untuk produksi (koreksi saya jika saya salah).
Jika ada yang punya pengalaman dengan salah satu dari alternatif ini atau mengetahui orang lain, silakan tambahkan mereka dalam komentar. Secara pribadi, saya benar-benar menyukai datastore GAE - Saya merasa ini merupakan peningkatan yang cukup besar atas AWS SimpleDB - jadi saya berharap atas keberhasilan upaya ini untuk meringankan beberapa masalah dalam menggunakannya.
sumber
Saya sangat merekomendasikan Java untuk GAE dan inilah alasannya:
Saya menggunakan Java / GAE dalam pengembangan sekarang.
sumber
Seperti yang telah Anda identifikasi, menggunakan JVM tidak membatasi Anda untuk menggunakan bahasa Java. Daftar bahasa dan tautan JVM dapat ditemukan di sini . Namun , Google App Engine memang membatasi set kelas yang dapat Anda gunakan dari set Java SE normal, dan Anda akan ingin menyelidiki jika salah satu dari implementasi ini dapat digunakan pada engine app.
EDIT: Saya melihat Anda telah menemukan daftar seperti itu
Saya tidak dapat mengomentari kinerja Python. Namun, JVM adalah platform yang sangat kuat untuk kinerja-bijaksana, mengingat kemampuannya untuk secara dinamis mengkompilasi dan mengoptimalkan kode selama waktu berjalan.
Pada akhirnya kinerja akan tergantung pada apa yang aplikasi Anda lakukan, dan bagaimana Anda mengkodekannya. Dengan tidak adanya info lebih lanjut, saya pikir tidak mungkin untuk memberikan petunjuk lagi di area ini.
sumber
Saya kagum dengan betapa bersih, mudah, dan masalah membebaskan Python / Django SDK. Namun saya mulai mengalami situasi di mana saya perlu mulai melakukan lebih banyak JavaScript dan berpikir saya mungkin ingin mengambil keuntungan dari GWT dan utilitas Java lainnya. Saya baru mendapatkan setengah dari tutorial Java GAE, dan memiliki satu masalah setelah yang lain: masalah konfigurasi Eclipse, versiRE JRE, kompleksitas Java yang mematikan pikiran, dan tutorial yang membingungkan dan mungkin rusak. Memeriksa situs ini dan orang lain yang terhubung dari sini meraihnya untuk saya. Saya akan kembali ke Python, dan saya akan melihat ke Piyama untuk membantu dengan tantangan JavaScript saya.
sumber
Saya sedikit terlambat untuk percakapan, tapi ini dua sen saya. Saya benar-benar kesulitan memilih antara Python dan Java, karena saya fasih dalam kedua bahasa. Seperti yang kita semua tahu, ada kelebihan dan kekurangan untuk keduanya, dan Anda harus memperhitungkan persyaratan Anda dan kerangka kerja yang paling cocok untuk proyek Anda.
Seperti yang biasanya saya lakukan dalam dilema jenis ini, saya mencari angka untuk mendukung keputusan saya. Saya memutuskan untuk menggunakan Python karena berbagai alasan, tetapi dalam kasus saya, ada satu plot yang merupakan titik kritis. Jika Anda mencari "Google App Engine" di GitHub pada September 2014 , Anda akan menemukan gambar berikut:
Mungkin ada banyak bias dalam angka-angka ini, tetapi secara keseluruhan, ada tiga kali lebih banyak repositori GAE Python daripada repositori Java GAE. Tidak hanya itu, tetapi jika Anda mendaftar proyek dengan "jumlah bintang" Anda akan melihat bahwa sebagian besar proyek Python muncul di bagian atas (Anda harus memperhitungkan bahwa Python telah ada lebih lama). Bagi saya, ini menjadi alasan kuat bagi Python karena saya memperhitungkan adopsi komunitas & dukungan, dokumentasi, dan ketersediaan proyek sumber terbuka.
sumber
Ini adalah pertanyaan yang bagus, dan saya pikir banyak tanggapan telah memberikan pandangan yang baik tentang pro dan kontra di kedua sisi pagar. Saya sudah mencoba AppEngine berbasis Python dan JVM (dalam kasus saya saya menggunakan Gaelyk yang merupakan kerangka kerja aplikasi Groovy yang dibangun untuk AppEngine). Ketika datang ke kinerja pada platform, satu hal yang saya tidak mempertimbangkan sampai menatap saya di muka adalah implikasi dari "Permintaan Muatan" yang terjadi di sisi Jawa pagar. Saat menggunakan Groovy, permintaan pemuatan ini adalah pembunuh.
Saya menempatkan posting bersama pada topik ( http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ ) dan saya berharap menemukan cara untuk mengatasi masalah tersebut, tetapi jika tidak saya pikir saya akan kembali ke kombinasi Python + Django sampai dingin mulai permintaan java memiliki dampak yang lebih kecil.
sumber
Berdasarkan seberapa banyak saya mendengar orang Jawa mengeluh tentang AppEngine dibandingkan dengan pengguna Python, saya akan mengatakan Python jauh lebih sedikit stres untuk digunakan.
sumber
Ada juga proyek Unladen Swallow , yang tampaknya didanai Google jika bukan milik Google. Mereka mencoba mengimplementasikan backend berbasis LLVM untuk bytecode Python 2.6.1, sehingga mereka dapat menggunakan JIT dan berbagai optimisasi kode asli / GC / multi-core yang bagus. (Kutipan yang bagus: "Kami bercita-cita untuk tidak melakukan karya asli, alih-alih menggunakan sebanyak 30 tahun terakhir dari penelitian mungkin.") Mereka mencari 5x mempercepat untuk CPython.
Tentu saja ini tidak menjawab pertanyaan langsung Anda, tetapi mengarah ke "penutupan kesenjangan" (jika ada) di masa depan (mudah-mudahan).
sumber
Keindahan python saat ini adalah seberapa baik berkomunikasi dengan bahasa lain. Misalnya Anda dapat memiliki kedua python dan java di tabel yang sama dengan Jython. Tentu saja jython meskipun sepenuhnya mendukung perpustakaan java itu tidak sepenuhnya mendukung perpustakaan python. Tapi ini solusi ideal jika Anda ingin mengacaukan Java Libraries. Bahkan memungkinkan Anda untuk mencampurnya dengan kode Java tanpa kode tambahan.
Tetapi bahkan python sendiri telah membuat beberapa langkah untuk diwaspadai. Lihat ctypes misalnya, di dekat kecepatan C, akses langsung ke perpustakaan C semua ini tanpa meninggalkan kenyamanan pengkodean python. Cython selangkah lebih maju, memungkinkan untuk mencampur kode c dengan kode python dengan mudah, atau bahkan jika Anda tidak ingin mengacaukan dengan c atau c ++, Anda masih dapat kode dalam python tetapi menggunakan variabel tipe statis membuat program python Anda secepat C apps . Cython digunakan dan didukung oleh Google.
Kemarin saya bahkan menemukan alat untuk python ke inline C atau bahkan Assembly (lihat CorePy), Anda tidak bisa mendapatkan yang lebih kuat dari itu.
Python jelas merupakan bahasa yang sangat matang, tidak hanya berdiri sendiri, tetapi mampu bekerja sama dengan bahasa lain dengan mudah. Saya pikir itulah yang membuat python solusi ideal bahkan dalam skenario yang sangat maju dan berat.
Dengan python Anda dapat memiliki akses ke C / C ++, Java, .NET dan banyak perpustakaan lainnya dengan hampir nol pengkodean tambahan memberi Anda juga bahasa yang meminimalkan, menyederhanakan dan memperindah pengkodean. Ini bahasa yang sangat menggoda.
sumber
Pergi dengan Python meskipun GWT tampaknya sangat cocok untuk jenis aplikasi yang saya kembangkan. JPA sangat kacau di GAE (mis. Tidak ada @Embeddable dan batasan tidak terdokumentasi yang tidak jelas lainnya). Setelah menghabiskan satu minggu, saya dapat mengatakan bahwa Java tidak merasa tepat pada GAE saat ini.
sumber
Satu pemikiran untuk dipertimbangkan adalah kerangka kerja yang ingin Anda gunakan. Tidak semua kerangka kerja di sisi Java sangat cocok untuk aplikasi yang berjalan di App Engine, yang agak berbeda dari server aplikasi Java tradisional.
Satu hal yang perlu dipertimbangkan adalah waktu startup aplikasi. Dengan aplikasi web Java tradisional, Anda tidak perlu memikirkan hal ini. Aplikasi dimulai dan kemudian dijalankan. Tidak masalah jika startup membutuhkan waktu 5 detik atau beberapa menit. Dengan App Engine Anda mungkin berakhir dalam situasi di mana aplikasi hanya dimulai ketika permintaan masuk. Ini berarti pengguna sedang menunggu saat aplikasi Anda boot. Fitur GAE baru seperti instance yang dipesan membantu di sini, tetapi periksa dulu.
Hal lain adalah berbagai perbedaan GAE psoes di Jawa. Tidak semua kerangka kerja senang dengan batasan pada kelas apa yang dapat Anda gunakan atau fakta bahwa utas tidak diizinkan atau bahwa Anda tidak dapat mengakses sistem file lokal. Masalah-masalah ini mungkin mudah diketahui dengan hanya mencari Google tentang kompatibilitas GAE.
Saya juga melihat beberapa orang mengeluh tentang masalah dengan ukuran sesi pada kerangka UI modern (yaitu, Wicket). Secara umum kerangka kerja ini cenderung melakukan trade-off tertentu untuk membuat pembangunan menyenangkan, cepat dan mudah. Terkadang ini dapat menyebabkan konflik dengan keterbatasan App Engine.
Saya awalnya mulai mengembangkan bekerja pada GAE dengan Java, tetapi kemudian beralih ke Python karena alasan ini. Perasaan pribadi saya adalah bahwa Python adalah pilihan yang lebih baik untuk pengembangan App Engine. Saya pikir Java lebih "di rumah" misalnya di Elastic Beanstalk Amazon.
TETAPI dengan App Engine segalanya berubah sangat cepat. GAE berubah dengan sendirinya dan semakin populer, kerangka kerja juga berubah untuk mengatasi keterbatasannya.
sumber