DHH談Ruby效能

上次的這篇 Joel談Ruby效能 其實DHH(RoR發明人)也有文章回應(反擊?),我覺得更為公允實在…:p。摘要重點翻譯如下:

Outsourcing the performance-intensive functions (把效能密集的程式外包出去)

每種程式語言本來就有不同擅長的地方,例如 Yahoo 跟 Amazon 就會使用 C++或 Java 來處理 back-ends,而在前台使用PHP或Perl。而在 Basecamp 中,縮圖程式長這樣

def thumbnail(temp, target)
  system(
    "/usr/local/bin/convert #{escape(temp)} -resize 48x48! #{escape(target)}"
  )
end

看起來有點作弊,Ruby竟然直接呼叫 imageMagicK 指令。但是這不就是為什麼叫做 scripting language 的原因嗎?我們不用發明縮圖程式,因為有人已經用C寫好更快的了,同理  Bayesian filter 也是,已經有人用其他更快的程式語言寫好,你只需要呼叫即可,而且這些常常都有人寫好 wrappers了,例如 RMagickMySQL/Ruby

你不必只限制在只能一種程式語言來開發,在大部分情況下使用有高度 productivity 的程式語言,然後把有瓶頸(bottlenecks)的部份外包(outsource)給已經用更快的程式語言寫好的套件(packages),或是自己寫需要的擴充(extension)。

我們在 Campfire 也碰到明顯的瓶頸 bottleneck,上百個使用者每隔三秒就要同時要更新資料,本來用100行的Ruby code,後來改寫成300行的C。整個專案保持 90% 的 Ruby code,把瓶頸 bottleneck都外包給 C。假設為了獲得最大效能(performance)而全部用C寫,那大概會發瘋吧。

所以不要讓瓶頸 bottlenecks (不管是真的或想像中的瓶頸,通常還是後者) 來支配你的軟體開發環境選擇考量。有個詞這樣描述那樣的情況,稱作 “premature optimization”。(貿然實施最佳化,是各種傷害的根源)

Leave a Reply