PHP web server 隨想

來源:互聯網
上載者:User
  最近和朋友討論個問題,是用PHP作為web server,初衷是為了要在原本的基礎上提升系統的效率。   

  首先這樣做的原因是由PHP的特性造成的,對於一個PHP應用的每次請求,都會初始化一系列的資源,請求結束的時候,釋放這些資源。問題是顯而易見的,必定會有一些資源是在重複初始化和釋放,造成系統資源的浪費。   

  用PHP 作為server的做法是,將請求全部定位到PHP的一次請求處理中,做死迴圈,解析請求資源,路由到相應的function,可以理解為局部應用,這樣 做是在一次請求中,zend引擎不會釋放任何資源,這裡我把資源分為兩類,一是app 應用的架構的資源,二是每次請求獨立的資源。PHP 的web server 資源管理完全在PHP 指令碼實現,效率比較起正常的apache+mod_php5 高很多,弊端是極為容易造成記憶體泄露,為應用添加功能的時候,只能在局限在函數中(函數中是局部變數),並且對於變數的命名要很注意,同時對於PHP編碼 要求比較高。  

  我認為這種做法應該站在幾個方面來考慮。  

  首先從大得方面來講,在PHP指令碼層面做server 來說,對於PHP來說是"返璞歸真"的一種表現。個人覺得有悖於軟體發展的規律,zend為初始化以及釋放每次資源做了大量的工作,為的就是代碼編寫的簡 單,降低PHP的門檻,做應用的時候,加上熟悉開源的MySql,可以快速,高效的開發應用,風靡全球。但正是由於這種原因,程式員不在關心記憶體,不再關 心關心資料結構,因為資料的尋找,排序會交給資料庫來完成。一度時間,PHP被甚至被稱為草根階級,也不是沒有道理,是值得我們深思的一個問題。   

  從小的方面來講,這樣帶來的好處是在小範圍內極大的提高系統的效率,節省大量資源,要是只是代碼編寫習慣上一些細微的改變,在公司內部部署還是一個很好的選擇,而且增加新的高效的應用的起點也比較低。  

  假如是要正常的思維,是要開發一個架構的模組,將每次請求重複初始化架構的一些資源初始化在PHP的啟動階段,這樣做的缺點有:首先用C語言開發一個架構作為擴充的成本比較高。然後每次請求的資源不能重用,對於這種弊病,實際上在很久之前本人就開始考慮開發一個擴充,能夠將請求的資源註冊到全域,來實現 資源的高效重用。想要對請求資源的重用幾乎要對zend源碼做改動,而不是僅僅做擴充,成本有會增加。   

  總得來講,效率和成本是不可能同時存在的,正所謂魚和熊掌不可兼得。考慮自身的情況來實現任意一種方案來實現高效都是合理的,因為:存在的,就是合理的。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.