程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP框架與Ruby/Python框架有啥不同

PHP框架與Ruby/Python框架有啥不同

編輯:關於PHP編程

PHP:每次HTTP請求過來以後,初始化全部資源(例如創建數據庫鏈接、加載系統類庫,創建緩存等等),處理完畢,釋放全部資源。

Python/Ruby:初次啟動的時候初始化資源,隨後的請求就不必再次初始化資源了。

PHP和Python/Ruby之間機制的區別就是:

  1. PHP極難出現嚴重的內存洩露問題,隨便你代碼寫的多爛,反正每個請求一執行完畢,所有資源統統釋放光。而Python/Ruby則需要依賴GC來回收內存,因此稍有不慎,還是會出現GC無法釋放的內存洩露問題。
  2. PHP每次請求都要初始化資源,這個開銷非常大。所以盡管PHP解析器本身的運行速度是極快的,但是一旦使用復雜的PHP框架,那麼由於需要每次請求的時候初始化整個框架,性能的下降非常厲害,你用一個很復雜的PHP框架的結果就是整體性能被Ruby遠遠甩開。這也是為什麼PHP社區這麼多年來,並不怎麼傾向於使用框架的原因之一。
  3. 由於PHP這種每請求初始化資源的機制,也造成了PHP添加跨請求的高級特性相當困難,這是PHP本身一個很大的限制,但是反過來說,正是這種限制使得PHP始終保持在一個比較簡單的web語言上面,而正是這一點才是PHP得以成為互聯網第一Web編程語言的原因,因此也未必就不好。

總之,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理念的東西能有多大前途,我覺得很難說。

框架設計要注意開發成本,集成是好事情,但是集成過多造成的資源浪費和開發不便是一些框架在發展過程中甚至是導致極致死的原因,將框架簡單化配以插件化的開發方式才是真正的框架產品化。簡單之美才是美,但很多框架設計者也意識到,想把框架做簡單真的是很難的事情。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved