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

2021-08-24 22:56:36 字數 934 閱讀 3254

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開發框架並不是一條光明的道路。

nginx去掉單個目錄和多個目錄PHP執行許可權方法

我們經常希望某些目錄不能執行php 如果是nginx的話,我們怎麼設定nginx對於某些目錄禁止執行php許可權呢。以前不知道,其實nginx去掉單個目錄和多個目錄php執行許可權方法也很簡單。1 單個目錄去掉php執行許可權 location attachments php php5 deny a...

php與XML XSLT Mysql的結合運用

php與xml xslt mysql的結合運用 瀏覽次數 248 一 php與xml xslt mysql的結合運用,安裝篇 經常看到有使用者問一些關於php與xml 資料庫結合運用的貼子,也經常看到一些初學者 把php 與html 混寫到一起,然後在出錯的時候找不到錯誤,急得團團轉,下面我就給大 ...

linux使用crontab實現PHP執行定時任務

首先說說cron,它是乙個linux下的定時執行工具。根使用者以外的使用者可以使用 crontab 工具來配置 cron 任務。所有使用者定義的 crontab 都被儲存在 var spool cron 目錄中,並使用建立它們的使用者身份來執行。要以某使用者身份建立乙個 crontab 專案,登入為...