RoR vs. PHP?談 web 開發技術的未來?
本文拖太久了,斷斷續續寫,寫到後來都忘記本來想寫什麼了。不過我發現,好像 thegiive 自己分多次,把很多我要寫的都寫完了。:-p
剛剛看到這篇《Twitter , Rails , Scalibility...More》,我哈哈大笑三聲。所謂的 scalability,就是「有沒有能力在短時間內應付突然爆增的流量成長」嘛!結果 thegiive 最後的結論竟然是:
那麼一時之間無法解決也是非常正常的事情。所以,他們應該也不是太懶惰,只是成功的太突然,沒辦法吃下來。…至於 Ruby 是不是真的太慢,Rails 是不是真的不夠 Scalibilty 呢?這個問題我也不知道…
既然這樣子,那我也沒辦法了,寫再多,又有何用,情人眼中出西施咩。所以剩下的我也就懶得寫了,各位看官自行斟酌吧。
這篇是為了回應 thegiive 的這篇《簡單的回應 JeffHung 的文章》,thegiive 對於我在《COSCUP2006》裡對 RoR 的一些意見,不表認同。不過在談技術之前,我想先澄清一點的是,這種很明顯地就是會沒有結論,甚至容易陷入 flame war 的問題,其實並不適合在那種場合提出 challenge,因為不會解決任何事情。用 challenge 這個字眼,其實也不太對,COSCUP 是個可以讓大家 up up 的場合,真的沒有必要白刀子進紅刀子出。事後的交流,也是可以產生火花,而且更為持久,一切由心,端看我們怎麼想,個人覺得實在是沒有必要那麼亢奮。
再好的 template engine,也解決不了套版的問題
我們先來看看套版的問題好了。也許是雙方對「套版」兩字的定義不同吧?我的意思是,在一般網站的開發過程中,程式設計師將動態網頁的功能寫好時,通常網頁的畫面是「素」的,非常陽春不經任何裝飾。接下來要做的就是,將轉交給版面設計師,也就是俗稱的美工,所設計好的華麗版面,套在這個「素」的版面上。對於程式設計師來說,這個「套版」的過程,通常是非常痛苦無聊的,但又不可能交給版面設計師處理,因為通常版面設計師,並無法處理到「碼」的層級。面對美麗的美工姊姊,小小工程師只好乖乖地與複雜的 HTML 混碼奮鬥。
更恐怖的是,通常來說,這個過程不會只做一遍,通常會形成一個循環,程式改好後套版,版面或程式稍微改寫之後,又要重新套版,循環不休。這當然是因為,在專案進行的過程當中,通常不可能很幸運地可以一條鞭式地順著瀑布溜下來。
對於套版問題,目前已經成熟的技術,是各式各樣的 template engine,如 PHP 的 Smarty。除了解決了 security-concern、separate-from-login 與 caching 等需求之外,簡單的語法,也讓套版的困難度,降低了少許。但無論如何,template 仍然是以「碼」的形式存在,要處理套版,仍然是只能讓程式設計師會版面設計,或者是讓版面設計師會寫點程式。
幸好,這個世界有在慢慢地改善,隨著 CSS/W3CStd. 的普及,以及 Ajax 的流行,套版的問題,將可以得到相當大的改進。如果網頁是功能性的,像 Gmail 那樣,比較好的解法會是使用如 ZK、GWT 這類的 Ajax framework,讓擅長處理複雜度的程式設計師處理套版;而若網頁是視覺性的,注重美觀與閱讀性,使用 CSS + semantic-rich XHTML,便可以讓擅長視覺設計的版面設計師處理套版。
但真正要解決套版問題,還是需要依靠「拉一拉」以及「WYSIWYG editor」,並且必須要做到,「版面設計師看到的是華麗的頁面,程式設計師看到的是素的頁面」以便應付隨著專案進行而來的修改循環。
那 RoR 有解決了套版的問題嗎?目前看來似乎是還沒有。雖然透過 Ruby 的語法,讓 RoR 的 template 十分地好用,但仍然是以「碼」的方式呈現,故仍然還是處於目前網頁技術的等級,並沒有什麼突破性的進展。更由於其「年輕」的特質,對應於 RoR 的「拉一拉」以及「WYSIWYG editor」的開發環境,相對於其他已經佔有市場極大份額的開發語言來說,能夠出線的機率就少了很多[1][2]。
Scale/performance 不僅僅是系統架構的問題,程式架構也影響很大
如果要單純比較 RoR 與 PHP 的 scaling 能力,搬出系統架構,實在是很沒有意義。不管前端是用 RoR 還是 PHP,server 都要 tune,系統架構都是要特別規劃的。並不是說 RoR 有 MemCache,PHP 就沒有,RoR 有 ViewCache,PHP 就沒有,或是 RoR 可以搭配 reverse proxy、multi-db,PHP 就不行。
使用 framework 最大的問題,就是程式架構的彈性。就如同 thegiive 所說的,「如果你希望一個框架就可以解決 Scaling 問題,不如先去問小叮噹比較快。」使用 RoR 增加了很多程式架構的彈性嗎?我反倒覺得陷在 convention 裡,是限制了程式架構的彈性。正如 thegiive 在 COSCUP2006 裡說的,如果是要開發一套全新的系統,那 RoR 非常適合;但如果是要與既有的系統介接整合,那 RoR 還力有未逮[3]。這是什麼意思呢?用白話講,就是:如果不照 RoR 的玩法走,那就幾乎是玩不下去了。Framework 的存在,通常是為了好讀好懂,好擴充功能而存在的。但實際的情形是,MVC 模型其實是個與 web/http 不太合的模型,硬要包裝成 MVC,代價就是程式的效能[4]。而更糟糕的是,透過 MVC 所減少的開發時間,與因套版問題而必須花費的時間比起來,常是九牛一毛。
因此,在使用 framework 反而會限制了程式架構的彈性時,「framework 能夠促進 scaling 的彈性」這樣子的陳述,就顯得有些弔詭。舉例來說,首頁的被存取量,相對內頁來說,通常大了很多。為了 scale/performance 的考量,在「程式架構」上,我們會把首頁裡靜態的內容部分,甚至只是較少更動的部分,使用 static-html-generation 的方式處理,事先或每個小時,重先產生。若是要按照 RoR 的「玩法」的話,這樣的機制,也不是辦不到,改寫一個 model 即可。但這就像為賦新詞強說愁一樣,脫褲子放屁。
ADO/O-R-mapping 與 SQL optimization
(...未完不續...)
參考資料
- 網站開發流程 及 各職務負責區域
- 網站開發快10倍-探索Ruby on Rails的高速魔法
- HTML?New Template System ? - 「當你在商業應用上,版面設計通常交給美工,他們只需要會 Dreamweaver 之類的東西,這時候,難道你要教美工 Ruby 程式設計?」
- Ruby on Rails觀察(負面想法,非喜勿視)
- 回 Ruby on Rails觀察(同樣負面想法,非喜勿視)
- Framework - not evil
- Twitter , Rails , Scalibility...More
3 Comments
將 RoR 跟 PHP 來比是太早了點。
RoR 現在仍在成長期。每一版本的語法、類庫以至設計思想都在改變,也沒有完整的IDE、除錯器、Refactor設備等等。在 production 的支援上比 Rails 現在當然贏不了。
這是先進的代價,就如當年用 Java 1.2 的先賢一樣。情況會變好的,再多幾個像 Twitter 那種層次的高用量的網站用 Rails ,Scalability 的解決方案就會出場了。就像今天除了特別差的軟件外 Java 不再慢了。
小影,
這篇是戰文啊。:-p
因為有人一直推崇 RoR 有多好多好,PHP 什麼都沒有。讓我不禁想跳出來澄清,RoR 還沒生出來前,PHP 的 frameworks 就已經滿天飛,各種 solution 滿地都是了。
誠然,RoR 有其先進的地方,但以我目前對 RoR 粗淺的了解,實在看不出 RoR 是什麼 silver bullet。RoR 有的,別的技術也不是沒有,反倒是 RoR 沒有的,別的技術很可能有。也許我有遺漏,但我目前唯一可以肯定,RoR 較為先進的地方,是他的 syntax,不過那是 Ruby 的功勞,不是 RoR 的。
當技術變成一種宗教時,我們應該更加地留心,事物的本質很可能不是我們所想像的。
Jeff Hung
「目前唯一可以肯定,RoR 較為先進的地方,是他的 syntax,不過那是 Ruby 的功勞,不是 RoR 的」
一個天才用了一個好的 language 寫了一個好的 framework, 不就是這個 framework 的功勞了 ? 我就想不出,可以用其他language 可以寫出 RoR 這個既 OO 又可以動態加載的 framework , 就算 php 要抄 RoR 的 style ,寫出來也是不倫不類了,可以抄到 syntax 也好,也抄不用 Rails 解決問題的創意
套版問題實在是無聊,有了 stylesheet , 有了partal , 真正用到套版的地方也己經處理到,不能 cache 的問題可以用 clustering 去解決,db 層面的 load balance 做好,render 的速度跟本微不足道
為了少許的 performance gain ,不如用回 C++ 去寫 web 了,php 快極也快不過 C++ 吧。
「透過 MVC 所減少的開發時間,與因套版問題而必須花費的時間比起來,常是九牛一毛」,MVC 的引進,使 layout 與 db 層面可以分開,見到 php 寫出來的 source code 這處 select ,那處 select ,看了就作嘔了,更不用說可以好像 Rails 般針對 model , controller , view 去作 test case 測試了
看完上文,覺得樓主所談的,只見樹木,不見樹林,單挑一些小而可以解決的問題去說,而看不見 rails 在web development 思維上的大進步,可惜可惜
2 Backlinks
網路與技術 RoR vs. PHP?談 web 開發技術的未來?
網路與技術 RoR vs. PHP?談 web 開發技術的未來?
Post a Comment