PHP:每次HTTP請求過來以後,初始化全部資源(例如創建數據庫鏈接、加載系統類庫,創建緩存等等),處理完畢,釋放全部資源。
Python/Ruby:初次啟動的時候初始化資源,隨後的請求就不必再次初始化資源了。
PHP和Python/Ruby之間機制的區別就是:
總之,PHP和Ruby的差異還是很大的,不適合放在一起比較,其實應該比較的是Ruby和Python才對。
所以我覺得Rails這種框架性做法被PHP跟風以後,其實是把PHP帶上了邪路,所以不如說是Rails在誤導PHP的發展。順便多說一句:DHH在編寫basecamp之前,一直是用PHP的,並且自己還寫了一個PHP的快速開發框架,他改用ruby以後,把當初自己寫的PHP框架也移植過來了,這個框架實際上是Rails最初的原型。那麼為什麼DHH當初不直接基於PHP做Rails呢?非要改用ruby以後,才發表rails呢?你看看PHP這種運行機制就知道了,PHP做復雜的web開發框架並不是一條光明的道路。
是否選擇PHP,是否選擇PHP Framework, 完全應該以是否滿足你的應用為指標: 事先確定框架的性能指標是否滿足你的應用,測試的時候你可能要開關各種緩存技術,而且可能要模擬出你的應用設計構架,然後決定適度、適當采用框架。有人習慣對於脫離應用比較哪個語言或者框架好和壞,我覺得這讓事情往往陷入僵局。沒有面對的問題、就無從說起問題的解決方案。技術方案都是面對某個應用的開發。不是嗎?
PHP之父Rasmus本人也明確表態他不喜歡 PHP framework. (Rasmus: "I don't like frameworks. PHP frameworks are ridiculous slow".)這是Rasmus在一次演講中提到的:Simple is Hard。
以PHP這種"每次請求作為一個完整的生命周期"的語言來說,本身就是追求簡單、反框架的。大型PHP互聯網應用會在後台用Java/C++寫中間件來完成復雜的業務邏輯處理。非要把PHP做成框架,並不是PHP本來應該承擔的責任。(其間提到了Drupal,但其都被大家定位為產品而非框架,這裡就不再累述。)
站在產品的層面來看,Python的CMS plone是最優秀的,功能非常強大,二次開發很容易,又沒有drupal的性能問題。上海潤普就用plone開發了好幾個商業項目了,其中包括像上航的一些系統。
但問題是:即便在Python社區裡面,高度產品化的zope/plone現在也漸漸不再是主流了,主流技術跑到了django那裡去了。所以drupal這種反PHP理念的東西能有多大前途,我覺得很難說。
框架設計要注意開發成本,集成是好事情,但是集成過多造成的資源浪費和開發不便是一些框架在發展過程中甚至是導致極致死的原因,將框架簡單化配以插件化的開發方式才是真正的框架產品化。簡單之美才是美,但很多框架設計者也意識到,想把框架做簡單真的是很難的事情。