Saya suka Ruby on Rails dan saya menggunakannya untuk semua proyek pengembangan web saya. Beberapa tahun yang lalu ada banyak pembicaraan tentang Rails sebagai ingatan babi dan tentang bagaimana itu tidak skala dengan baik tetapi saran-saran ini dimasukkan ke tempat tidur oleh Gregg Pollack di sini .
Namun belakangan, saya telah mendengar orang mengatakan bahwa Ruby itu sendiri lambat.
- Mengapa Ruby dianggap lambat?
Saya tidak menemukan Ruby lambat tapi sekali lagi, saya hanya menggunakannya untuk membuat aplikasi CRUD sederhana dan blog perusahaan. Proyek seperti apa yang harus saya lakukan sebelum saya menemukan Ruby menjadi lambat? Atau apakah kelambatan ini hanya sesuatu yang mempengaruhi semua bahasa pemrograman?
Apa pilihan Anda sebagai programmer Ruby jika Anda ingin berurusan dengan "kelambatan" ini?
Versi Ruby manakah yang paling cocok untuk aplikasi seperti Stack Overflow di mana kecepatan sangat penting dan lalu lintas sangat intens?
Pertanyaannya subyektif, dan saya menyadari bahwa pengaturan arsitektur (EC2 vs server mandiri dll) membuat perbedaan besar tetapi saya ingin mendengar pendapat orang tentang Ruby yang lambat.
Akhirnya, saya tidak dapat menemukan banyak berita di Ruby 2.0 - saya kira kita masih jauh dari itu?
sumber
Jawaban:
Karena jika Anda menjalankan tolok ukur khas antara Ruby dan bahasa lain, Ruby akan kalah.
Ruby mungkin tidak akan membantu Anda dengan baik dalam menulis aplikasi pemrosesan sinyal digital waktu-nyata, atau sistem kontrol waktu-nyata apa pun. Ruby (dengan VM hari ini) mungkin akan tercekik pada komputer yang terbatas sumber daya seperti smartphone.
Ingat bahwa banyak pemrosesan pada aplikasi web Anda sebenarnya dilakukan oleh perangkat lunak yang dikembangkan dalam C. mis. Apache, Thin, Nginx, SQLite, MySQL, PostgreSQL, banyak parsing libraries, RMagick, TCP / IP, dll adalah program C yang digunakan oleh Ruby . Ruby menyediakan lem dan logika bisnis.
Beralih ke bahasa yang lebih cepat. Tapi itu butuh biaya. Ini adalah biaya yang mungkin sepadan. Tetapi untuk sebagian besar aplikasi web, pilihan bahasa bukan merupakan faktor yang relevan karena tidak ada lalu lintas yang cukup membenarkan menggunakan bahasa yang lebih cepat yang membutuhkan biaya lebih banyak untuk dikembangkan.
Orang lain telah menjawab ini - JRuby, IronRuby, REE akan membuat Ruby bagian dari aplikasi Anda berjalan lebih cepat pada platform yang mampu membayar para VM. Dan karena seringkali bukan Ruby yang menyebabkan kelambatan, tetapi arsitektur sistem komputer Anda dan arsitektur aplikasi, Anda dapat melakukan hal-hal seperti replikasi database, beberapa server aplikasi, loadbalancing dengan proxy terbalik, caching HTTP, memcache, Ajax, caching sisi klien, dll. Tak satu pun dari hal ini adalah Ruby.
Kebanyakan orang menunggu Ruby 1.9.1. Saya sendiri sedang menunggu Rails 3.1 di Ruby 1.9.1 di JRuby.
Akhirnya, harap diingat bahwa banyak pengembang memilih Ruby karena membuat pemrograman pengalaman yang lebih menyenangkan dibandingkan dengan bahasa lain, dan karena Ruby dengan Rails memungkinkan pengembang web yang terampil untuk mengembangkan aplikasi dengan sangat cepat.
sumber
Pertama-tama, lebih lambat sehubungan dengan apa ? C? Python? Mari kita dapatkan beberapa angka di Game Benchmarks Bahasa Komputer :
Tergantung pada siapa Anda bertanya. Anda dapat diberitahu bahwa:
Tapi, sekali lagi, lambat sehubungan dengan apa? Ruby 1.9 adalah secepat Python dan PHP (dalam faktor kinerja 3x) bila dibandingkan dengan C (yang bisa mencapai 300x lebih cepat), jadi hal di atas (dengan pengecualian pertimbangan threading, haruskah aplikasi Anda sangat bergantung pada aspek ini ) sebagian besar bersifat akademis.
Menulis untuk skalabilitas dan melemparkan lebih banyak perangkat keras padanya (mis. Memori)
Nah, REE (dikombinasikan dengan Penumpang ) akan menjadi kandidat yang sangat baik.
sumber
Inilah yang dikatakan pencipta Rails, David Heinemeier Hansson :
yaitu melemparkan lebih banyak perangkat keras atau mesin pada masalah lebih murah daripada mempekerjakan lebih banyak pengembang dan menggunakan bahasa yang lebih cepat, tetapi lebih sulit untuk dipertahankan. Bagaimanapun, sedikit orang yang menulis aplikasi web dalam bahasa C.
Ruby 1.9 adalah peningkatan besar di atas 1.8. Masalah terbesar dengan Ruby 1.8 adalah sifatnya yang ditafsirkan (tidak ada bytecode, tidak ada kompilasi) dan bahwa panggilan metode, salah satu operasi yang paling umum di Ruby, sangat lambat.
Itu tidak membantu bahwa hampir semuanya adalah metode pencarian di Ruby - menambahkan dua angka, mengindeks array. Di mana bahasa lain mengekspos hacks (
__add__
metode Python , overload.pm Perl) Ruby melakukan OO murni dalam semua kasus, dan ini dapat merusak kinerja jika kompiler / juru bahasa tidak cukup pintar.Jika saya sedang menulis aplikasi web populer di Ruby, fokus saya akan pada caching. Caching halaman mengurangi waktu pemrosesan untuk halaman tersebut menjadi nol, bahasa apa pun yang Anda gunakan. Untuk aplikasi web, overhead database dan I / O lainnya mulai lebih penting daripada kecepatan bahasa, jadi saya akan fokus pada pengoptimalan itu.
sumber
Menulis kode lambat. Membaca kode lambat. Menemukan dan memperbaiki bug lambat. Menambahkan fitur dan peningkatan lambat. Apa pun yang membaik pada yang sebelumnya adalah kemenangan. Jarang sekali kinerja eksekusi menjadi masalah.
sumber
Jawabannya sederhana: orang mengatakan ruby lambat karena ini lambat didasarkan pada perbandingan diukur dengan bahasa lain. Ingatlah, "lambat" itu relatif. Seringkali, ruby dan bahasa "lambat" lainnya cukup cepat.
sumber
Joel on Software - Ruby Performance Revisited menjelaskan dengan cukup baik. Mungkin sudah ketinggalan zaman ...
Saya akan merekomendasikan untuk tetap menggunakannya karena Anda terbiasa dengan Ruby on Rails,
jika Anda pernah menemui masalah kinerja, Anda mungkin mempertimbangkan untuk menggunakan bahasa dan kerangka kerja yang berbeda.
Dalam hal ini saya benar-benar menyarankan C # dengan ASP.NET MVC 2 , berfungsi sangat baik untuk aplikasi CRUD.
sumber
Saya akan mengatakan Ruby lambat karena tidak banyak upaya yang dihabiskan dalam membuat penerjemah lebih cepat. Hal yang sama berlaku untuk Python. Smalltalk sama dinamisnya dengan Ruby atau Python tetapi berkinerja lebih baik dengan besaran, lihat http://benchmarksgame.alioth.debian.org . Sejak Smalltalk lebih atau kurang digantikan oleh Java dan C # (yaitu setidaknya 10 tahun yang lalu) tidak ada lagi pekerjaan optimasi kinerja yang telah dilakukan untuk itu dan Smalltalk masih jauh lebih cepat daripada Ruby dan Python. Orang-orang di Xerox Parc dan OTI / IBM memiliki uang untuk membayar orang-orang yang bekerja untuk membuat Smalltalk lebih cepat. Yang tidak saya mengerti adalah mengapa Google tidak menghabiskan uang untuk membuat Python lebih cepat karena mereka adalah toko Python besar. Sebaliknya mereka menghabiskan uang untuk pengembangan bahasa seperti Go ...
sumber
Pertama-tama, apakah Anda peduli dengan apa yang orang lain katakan tentang bahasa yang Anda sukai? Ketika melakukan pekerjaan yang harus dilakukan, Anda baik-baik saja.
OO bukan cara tercepat untuk mengeksekusi kode, tetapi itu membantu dalam membuat kode. Kode pintar selalu lebih cepat daripada kode bodoh dan loop tidak berguna. Saya seorang DBA dan melihat banyak dari loop yang tidak berguna ini, lepaskan, gunakan kode dan kueri yang lebih baik dan aplikasi lebih cepat, lebih cepat. Apakah Anda peduli dengan mikrodetik terakhir? Anda mungkin memiliki bahasa yang dioptimalkan untuk kecepatan, yang lain hanya melakukan pekerjaan yang harus mereka lakukan dan dapat dipertahankan oleh banyak programmer yang berbeda.
Itu semua hanya pilihan.
sumber
Jelas, berbicara tentang kecepatan Ruby hilang. Meskipun tes benchmark menunjukkan bahwa Ruby tidak jauh lebih lambat dari PHP. Tetapi sebagai gantinya, Anda mendapatkan kode KERING yang mudah dipelihara, yang terbaik dari semua kerangka kerja dalam berbagai bahasa.
Untuk proyek kecil, Anda tidak akan merasakan kelambatan (maksud saya sampai seperti <50K pengguna) mengingat bahwa tidak ada perhitungan kompleks yang digunakan dalam kode, hanya hal-hal utama.
Untuk proyek yang lebih besar, membayar sumber daya terbayar dan lebih murah daripada upah pengembang. Selain itu, menulis kode pada RoR ternyata jauh lebih cepat daripada yang lain.
Pada tahun 2014, besarnya perbedaan kecepatan yang Anda bicarakan ini untuk sebagian besar situs web tidak signifikan.
sumber
Cara untuk berurusan dengan kinerja Ruby dalam aplikasi Web sama dengan bahasa pemrograman lainnya:
ARSITEKTUR
Ini lebih mudah dilakukan di Rails daripada di sebagian besar Kerangka Kerja Web lainnya.
Pada level aplikasi , dengan menembolok apa pun yang seharusnya di-cache dan dengan mengelola akses ke DB dengan cara yang cerdas (karena bottleneck biasanya pada akses "DB" untuk sebagian besar aplikasi WEB).
Rel membuatnya sangat mudah dan alami untuk menyelesaikan masalah ini. Ada beberapa abstraksi untuk caching data, halaman, dan fragmen , dan ada juga abstraksi yang sangat bagus untuk menangani bagian SQL dengan cara yang dioptimalkan dan dapat digunakan kembali ( Rekaman Aktif dan AREL ).
Ini adalah alasan mengapa begitu banyak aplikasi yang ditulis dalam bahasa yang lebih cepat dan tidak terlalu ekspresif (seperti php) akhirnya menjadi lebih lambat daripada rekan-rekan Ruby. Tidak mudah dan elegan untuk menangani caching dan query dengan bahasa-bahasa ini dibandingkan dengan Ruby.
Pada tingkat infrastruktur , masuk akal untuk memikirkan penyeimbangan muatan dan semua hal yang tidak saya ketahui banyak tentangnya. Saya akan mengalihdayakan masalah itu dengan menyewa beberapa platform sebagai penyedia layanan, seperti Heroku atau Engine Yard . Bagaimanapun. Menyebarkan rel dengan load balancing mungkin tidak terlalu sulit untuk dilakukan.
sumber
Ruby lebih lambat daripada C ++ di sejumlah tugas yang mudah diukur (mis., Melakukan kode yang sangat bergantung pada floating point). Ini tidak terlalu mengejutkan, tetapi cukup banyak pembenaran bagi beberapa orang untuk mengatakan bahwa "Ruby itu Lambat" tanpa kualifikasi. Mereka tidak menghitung fakta bahwa jauh lebih mudah dan aman untuk menulis kode Ruby daripada C ++.
Perbaikan terbaik adalah dengan menggunakan modul bertarget yang ditulis dalam bahasa lain (misalnya, C, C ++, Fortran) dalam kode Ruby Anda. Mereka dapat melakukan angkat berat dan skrip Anda dapat fokus pada masalah koordinasi tingkat yang lebih tinggi.
sumber
Kinerja hampir selalu tentang desain yang baik dan interaksi basis data yang dioptimalkan. Ruby melakukan apa yang dibutuhkan sebagian besar situs web dengan cukup cepat, terutama versi yang lebih baru; dan kecepatan pengembangan dan kemudahan perawatan memberikan hasil besar dalam biaya dan untuk membuat pelanggan senang. Saya menemukan JAVA memiliki kinerja eksekusi yang lambat untuk beberapa tugas, dan mengingat sulitnya pengembangan di JAVA, banyak pengembang membuat aplikasi lambat terlepas dari kemampuan kecepatan teoretis seperti yang ditunjukkan dalam tolok ukur (tolok ukur biasanya dibuat untuk menunjukkan kemampuan yang spesifik dan sempit). Ketika saya membutuhkan pemrosesan intensif yang tidak cocok dengan kemampuan basis data saya, saya memilih C atau Objective-C atau bahasa kompilasi lain yang benar-benar berkinerja tinggi untuk tugas-tugas tersebut tergantung pada platform. Jika saya perlu membuat aplikasi web berbasis data, Saya menggunakan RoR atau terkadang C # ASP.NET tergantung pada persyaratan lain; karena semua platform memiliki kekuatan dan kelemahan. Kecepatan eksekusi dari hal-hal yang dilakukan aplikasi Anda penting, tetapi bagaimanapun, jika kinerja eksekusi dari satu aspek sempit bahasa adalah yang terpenting; maka saya mungkin masih menggunakan bahasa Assembler untuk semuanya.
sumber
Orang mengatakan bahwa Ruby lambat karena mereka membandingkan program Ruby dengan program yang ditulis dalam bahasa lain. Mungkin program yang Anda tulis tidak perlu lebih cepat. Mungkin untuk program yang Anda tulis, Ruby bukanlah penghambat yang memperlambat segalanya.
Ruby 2.1 dibandingkan dengan Javascript V8
Ruby 2.1 dibandingkan dengan Lua biasa
Ruby 2.1 dibandingkan dengan Python 3
sumber
Ruby berkinerja baik untuk produktivitas pengembang. Ruby secara alami memaksa pengembangan yang didorong oleh tes karena kurangnya jenis. Ruby berkinerja baik ketika digunakan sebagai pembungkus tingkat tinggi untuk perpustakaan C. Ruby juga berkinerja baik selama proses yang berjalan lama ketika JIT-dikompilasi ke kode mesin melalui JVM atau Rbx VM. Ruby tidak berkinerja baik ketika diharuskan untuk memecahkan angka dalam waktu singkat dengan kode ruby murni.
sumber