2013-01-16 25 views
1

免責聲明:不要讓「打開哪種語言比別的更好」的地獄門。
我喜歡PHP和Java。
Drupal引導每個請求和性能

我剛開始挖掘Drupal,發現一些看起來很奇怪的東西。 從index.php文件的外觀看來,Drupal似乎需要引導來自客戶端的每個Http請求。
與像Spring這樣的Java框架(是的,我有java背景)相比,這看起來像是開銷,如果它意味着Drupal必須閱讀必要的whatevery配置。我不太瞭解任何框架,但不會在啓動時加載配置一次?

我的問題是
如果Drupal有來引導爲每個請求,它是如何處理大量的請求? 由於PHP的性質,這是否會給Drupal帶來性能上的劣勢?

回答

4

PHP本質上是非持久性語言。請求之間你沒有分享。

持續性總是在外面管理,即會話由通信中的cookie處理,加載持久性會話存儲(通常是一個文件,但它是Drupal的數據庫存儲)。並且該應用程序的內容位於數據庫,文件等上。

使用PHP,您無法創建持久性服務器,爲多個請求重複使用對象。事實上,你現在可以使用PHP的一些高級用法來嘗試它,但它不是語言的本質,它不是爲此而構建的。所有事情都必須首先加載,並且在請求處理結束後所有內容都會被終止。

因此,所有PHP CMS或框架以及Drupal都是其中之一,它們都是以巧妙的方式處理這一事實。其主要策略是加快緩存環境重建的時間(一如既往,管理PHP以外的持久性)。要管理使用Drupal高負荷應用程序,你必須調整高速緩存管理:

  • 激活緩存(當然)
  • 使用多個高速緩存層,例如像APC對於某些類和路徑緩存,內存緩存或mongodb用於某些其他緩存,MySQL(默認)用於其他緩存等等。您還可以使用諸如Session proxy或其他模塊來在redis服務器上調度會話管理,或者使用mongodb,memcache,redis等。
  • 使用像varnish之類的反向代理緩存來管理公共頁面緩存,甚至可以使用varnish ESI來頁面部分。

如果您將其與持久性應用程序服務器(如Java或C#)進行比較可能會產生問題,這似乎是一個壞處。但是有些時候,早期的約束可以幫助開發人員找到更好的方法(我不是說Drupal總是使用最好的方式來做事情:-))。許多重負載網站使用PHP(使用緩存)。所以這只是一個不同的網站做法。

+0

我非常喜歡你的答案。謝謝 ! – Ascendant

+0

哦,你能給我一些關鍵字,這將導致'先進的PHP的用法'請嗎?我想嘗試持久服務器的事情:) – Ascendant

+1

php-cli,http://verens.com/2008/01/31/persistent-web-apps-in-php/,http://stackoverflow.com/questions/2036654/run-php-script-as-daemon-process,http://andytson.com/blog/2010/05/daemonising-a-php-cli-script-on-a-posix-system/,http: //www.funphp.com/?p=33等,但要準備好內存泄漏:-) – regilero