PHP和Python/Ruby的運行機制有一個本質區別:PHP是每次HTTP請求過來之後,初始化所有資源(例如建立數據庫連接、加載系統類庫,建立緩存等等),處理完畢,釋放所有資源,這不像Python/Ruby之類帶有GC的腳本語言,Python/Ruby是初次啓動的時候初始化資源,隨後的請求就沒必要再次初始化資源了。web
這種機制的差別帶來的區別就是:數據庫
一、PHP極難出現嚴重的內存泄露問題,隨便你代碼寫的多爛,反正每一個請求一執行完畢,全部資源通通釋放光。而Python/Ruby則須要依賴GC來回收內存,所以稍有不慎,仍是會出現GC沒法釋放的內存泄露問題。編程
二、PHP每次請求都要初始化資源,這個開銷很是大。因此儘管PHP解析器自己的運行速度是極快的,可是一旦使用複雜的PHP框架,那麼因爲須要每次請求的時候初始化整個框架,性能的降低很是厲害,你用一個很複雜的PHP框架的結果就是總體性能被Ruby遠遠甩開。這也是爲何PHP社區這麼多來,並不怎麼傾向於使用框架的緣由之一。緩存
三、因爲PHP這種每請求初始化資源的機制,也形成了PHP添加跨請求的高級特性至關困難,這是PHP自己一個很大的限制,可是反過來講,正是這種限制使得PHP始終保持在一個比較簡單的web語言上面,而正是這一點纔是PHP得以成爲互聯網第一Web編程語言的緣由,所以也未必就很差。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開發框架並非一條光明的道路。編程語言