我已經看到一些參考資料,指的是一旦用戶負載增加,開發人員必須用Ruby(Java或C)以外的語言編寫其rails應用程序的某些部分(後臺處理,密集任務)(似乎Twitter是前。 這個的)。這些可能是Rails 1.0 -2.0時期出現的大多數問題。不過,如果事實確實如此,我想確認那些經營真正生產應用的開發人員。需要使用另一種語言編寫軌道生產應用程序的代碼?
回答
根據我的經驗,很少有人需要用Ruby以外的語言編寫Rails應用程序的服務器端部分。
像Twitter這樣的公司遭受的問題遠遠超出了大多數Web應用程序必須處理的範圍,因此爲了討論起見,應該排除它們。 Twitter是一個極端的異常。
但是,在大多數非平凡的Rails應用程序中,通常需要後臺作業排隊和處理,儘管這些作業通常也是用Ruby編寫的。
遵守的一條好規則是,您絕對不應該讓用戶等待,並立即返回對HTTP請求的響應,而不會不必要地捆綁(Ruby支持的)請求處理器。例如,如果上傳大圖像並且需要大量密集轉換 - 這應該是異步和脫機完成的。無論其性能如何,其他Web應用程序框架和語言也是如此。
如果您需要更高的後臺作業性能,則可以簡單地擴展正在處理作業的工作進程的數量。這對服務於Rails請求也是如此 - 您可以添加更多的Unicorn工作進程來處理更多請求。
雖然Ruby確實比C或熱身的JVM慢得多,但它通常「足夠快」。
如果您使用的是MRI Ruby,那麼您應該使用Ruby 1.9.3,它至少比1.8.x系列快兩倍,並且垃圾收集略有改善。 JRuby也表現良好,並且在每個發行版中都獲得了更高的性能。最後,現代的Rails應用程序爲客戶端分配了更多的處理,並且通常包含比以前更多的JavaScript/CoffeeScript。他們經常在視圖中使用更多的部分AJAX更新,從而減少了Rails堆棧渲染所花費的時間,以及比4年前更少的服務器端Ruby處理所需的更小,更輕的數據庫查詢。
您的應用程序的最大風險與性能無關,並且通常會快速變化,並且需要按時按預算交付。任何技術選擇都是如此,儘管Rails已知可以幫助減輕這些領域的負擔。我從一個多年來使用了許多框架和語言的開發人員的角度寫這篇文章,其中包括速度更快的語言和堆棧,即PHP,C#/ ASP.NET MVC。
- 1. 使用哪種語言編寫代碼?
- 2. 用2種語言編寫程序?
- 3. 使用多種語言編寫應用程序
- 4. 確實需要另一種編程語言嗎?
- 5. 使用用外語(口頭)語言編寫的應用程序
- 6. 需要永久運行的應用程序的編程語言
- 7. 如何使用AWS Lambda中另一種語言編寫的包?
- 8. 爲什麼使用生產開發軌道應用程序
- 9. 我是否需要研究子進程以使此Python源代碼在另一種編程語言中工作?
- 10. 使用單例編寫的AIR應用程序需要產生多個應用程序實例
- 11. 我想知道如何編寫Raptor編程語言程序的僞代碼?
- 12. 我應該使用哪種語言來編寫GUI應用程序?
- 13. 用c語言編寫的代碼
- 14. 編程語言如何調用用其他語言編寫的代碼?
- 15. 使用多種編程語言創建代碼的嚮導
- 16. 如何知道用戶使用Javascript編寫哪種語言?
- 17. 多語言應用程序編碼
- 18. 是否可以使用三種編程語言編寫一個程序?
- 19. 用於編寫GUI應用程序的編程語言
- 20. 你是否曾經需要用匯編語言編寫真正的代碼?
- 21. 哪一種開發語言可以在不需要的情況下編寫應用程序。安裝框架?
- 22. 用不同的語言編寫一個應用程序
- 23. 在Haskell中生成另一種語言的代碼
- 24. 如何用另一種語言編寫我的joomla組件?
- 25. 下列程序使用哪種語言編寫?
- 26. Chromium OS使用哪種語言編寫?
- 27. Craigslist使用哪種語言編寫?
- 28. 用C語言編寫cgi代碼
- 29. 紅寶石在軌道上的多語言web應用程序
- 30. 軌道應用程序的語言環境
您將會發現,沒有大型Web應用程序完全建立在單個環境或語言上。例如,Facebook開始使用PHP和數據庫,但現在依賴於數十種技術。 Instagram從Django開始,現在使用Node.js來處理一些事情,或者至少在工作列表中進行名稱檢查。任何長期存活的應用程序最終都需要與第一天所需的技術不同的技術。 (順便說一句,包括Twitter在內的所有這些公司仍然使用這些原創技術來實現他們最擅長的事情。) – 2012-02-20 21:41:10
這是大型應用程序的唯一問題,除非您有10^6個客戶同時運行 - 或者純粹設計的應用程序,否則您應該可以使用rails生產應用程序,但爲此,您可以使用newrelic指示您要改進哪些內容 – mpapis 2012-02-20 21:42:06