PHP和Python/Ruby運行機制的本質區別

來源:互聯網
上載者:User

PHP和Python/Ruby的運行機制有一個本質區別:PHP是每次HTTP請求過來以後,初始化全部資源(例如建立資料庫連結、載入系統類別庫,建立緩衝等等),處理完畢,釋放全部資源,這不像Python/Ruby之類帶有GC的指令碼語言,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開發架構並不是一條光明的道路。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.