下面是drupal優化的一些經驗。分四大部分來講。
第一部分:Drupal系統本身的設定來達到優化
第二部分:針對php代碼進行的優化
第三部分:針對MYSQL資料庫進行的優化
第四部分:針對網站架構進行的優化
第一部分:Drupal系統本身的設定來達到優化
1、 把javascrip代碼和.js檔案挪到頁面的底部。這個方法對于提高頁面的通路速度有一定的作用。把js檔案放到頁面的底部能夠使頁面先下載下傳圖檔和文字等等資訊,最後才使js檔案運作。解決方法:把page.tpl.php(包括所有的page*.tpl.php檔案)裡的 代碼從标簽裡挪到代碼的上方即可。
2、javascript檔案合并。解決方法:下載下傳javascript_aggregator子產品(http://drupal.org/project/javascript_aggregator),這個子產品能把所有的.js檔案合并成一個.js檔案,這樣下載下傳的速度會提高一些。注意,這個子產品安裝的時候與一些子產品比如TinyMCE 、imce、fckeditor有些沖突,是以,安裝了TinyMCE子產品的話再安裝這個子產品需要在admin/settings/performance這個路徑下設定。
設定方法如下圖所示:
在"exclude from js aggregation",填寫出不需要內建到整個.js的js檔案的路徑。
從我的使用經驗看,javascript_aggregator子產品安裝以後,會引起一些奇怪的問題,尤其對線上編輯器不好,個人建議,能不用這個子產品還是盡量不用。
3、頁面緩存
Drupal擁有各種内置的方式,它能夠通過為匿名使用者存儲和發送壓縮了的緩存頁面,來減少資料庫的負重。通過啟用這一緩存,你可以使用一個單獨的資料庫查詢來高效的讀取頁面,而不是使用許多查詢來擷取頁面(在沒有緩存可用時就使用這種方式)。Drupal的緩存預設是禁用的,它可以在"管理➤ 站點配置 ➤ 性能"中配置。
4、帶寬最優化
這是"管理➤ 站點配置 ➤ 性能"頁面中的另一個性能優化措施,它能夠減少發送給伺服器的請求次數。通過啟用"合并和壓縮CSS檔案",Drupal将處理由modules建立的CSS檔案,壓縮它們,并将它們合并成一個檔案。這将減少每個頁面的HTTP請求數量,以及下載下傳頁面的整體大小。
5、調優Sessions表
Drupal将使用者會話儲存到它的資料庫中而不是檔案中。這意味着Drupal能夠很容易的應用到多個伺服器上,但是為了管理每個使用者的會話資訊它也增加了資料庫的負擔。如果一個站點每天有成千上萬個使用者,那麼很容得就會看到這個sessions表将會極速膨脹。(參考:http://www.5iphp.com/zh-hans/tech/354.html)
PHP允許你控制多長時間清除一次舊的會話記錄。Drupal将這一配置放到了它的settings.php檔案中:
ini_set('session.gc_maxlifetime', 200000); // 55小時(in seconds)
上面的代碼表示,PHP的垃圾收集系統運作周期的預設設定為大約兩天多。這意味着如果使用者兩天内沒有登入,那麼它的會話才會被删除。
如果你的sessions表正在瘋長,那麼你需要減少PHP的會話存在時間。
ini_set('session.gc_maxlifetime', 86400); // 24 hours (in seconds)
ini_set('session.cache_expire', 1440); // 24 hours (in minutes)
當調整session.gc_maxlifetime時,最好也将session.cache_expire設為相同的值,session.cache_expire用來控制緩存的會話頁面的存活周期。注意session.cache_expire的值的機關為分鐘。
還有cookie生存周期來也需要相應的減少,系統預設設定是
ini_set('session.cookie_lifetime', 2000000);
// 允許使用者保持登入大約3周時間(在此期間會話垃圾收集系統不會将他們的會話記錄從sessions表中删除)
改為ini_set('session.cookie_lifetime', 86400); // 24 小時(in seconds)
或者改為ini_set('session.cookie_lifetime', 0);//表示使用者關閉浏覽器,則使用者就會登出。
6、清除錯誤報告日志
Drupal有一個内部的日志系統,位于"管理 ➤ 日志 ➤ 最近的日志項",如果他沒有被定期地清除,那麼它将會快速的膨脹。這一日志存放在watchdog表中。如果你發現watchdog表的大小引起你的站點運作緩慢,你可以通過在"管理➤站點配置 ➤ 錯誤報告"裡調整相關配置來減小它的大小。注意,對該設定的修改将在cron下次運作時生效。不能定期的運作cron會使得watchdog表越來越大,進而為系統增加加大的負擔。
7、運作cron
"管理➤日志➤狀态報告"裡有一個"手動運作cron"的選項,你可以手動的運作cron。
如果在一Drupal站點上沒有運作cron,那麼資料庫就會充滿日志資訊、過期的緩存資料、以及其它的統計資料,這些都是應該從系統中定期清除的。
可以安裝poormanscron子產品,自動的定期運作cron。
(http://drupal.org/project/poormanscron)
第二部分:針對php代碼進行的優化
PHP代碼的優化措施
在Drupal中,由于PHP代碼執行在處理一個請求中占了一大塊,是以我們需要知道采取哪些措施才能加快這一程序。
有兩種方式可以減少執行PHP代碼所耗費的資源:
第一, 減少代碼總量。這個可以通過禁用不必要的Drupal子產品和編寫高效的代碼來實作。
第二, 使用一個PHP操作碼(opcode)緩存。
PHP對于每個請求,都會将所有代碼解析并編譯成一種中間形态,這種形态裡包含了一系列的操作代碼。添加一個opcode緩存可以讓PHP能夠重用前面編譯過的代碼,這樣就會跳過解析和編譯。
常見的opcode緩存有三種:Alternative PHP Cache (http://pecl.php.net/package/APC ), eAccelerator (http://eaccelerator.net ), XCache (http://trac.lighttpd.net/xcache/ ),。
第三部分:針對MYSQL資料庫進行的優化
Drupal需要進行大量的資料庫操作,是以有時候資料庫可能成為drupal的一個瓶頸。
1、 啟用MySQL的查詢語句緩存。
MySQL是Drupal最常用的資料庫。它具有在記憶體中緩存常用查詢語句的能力,這樣一個給定的查詢語句再次被調用時,MySQL将立即從緩存中将其傳回。
Windows下檢視MYSQL目錄下的my.ini裡的query_cache_size選項。
預設設定是query_cache_size=77M,可以根據情況适當增加。
2、 對于建立的資料庫要建立合适的索引,能夠提高MYSQL的查詢速度。
3、 Devel 子產品識别耗費資源的sql語句。(devel子產品的教程:http://www.5iphp.com/zh-hans/tech/63.html)
4、 MySQL中啟用緩慢查詢日志。
将超過10秒的查詢記錄到MySQL資料目錄中的日志檔案example.com-slow.log中去。你可以修改秒數以及日志的位置,如下面的代碼所示,這裡我們将緩慢查詢的最小值設為5秒:
# The MySQL server
[mysqld]
long_query_time = 5
log-slow-queries = /var/log/mysql/example-slow.log
第四部分:針對網站架構進行的優化
這部分我是完全參考别人寫的資料。因為對于網站架構,應該說更多的是營運人員懂的多。作為開發人員,你可能知道,應該怎麼架構,但是具體實施可能還是需要營運人員來做。
1、負載均衡
負載均衡器能夠将web請求配置設定到多個web伺服器上。在多個web伺服器的情況下,當一個web伺服器當掉或者維護時,負載均衡器允許web服務繼續運作。
2、多媒體伺服器
如果有大量的多媒體檔案,最好将這些檔案存放在一個單獨的伺服器上。進而減輕你的web伺服器的負擔使得Drupal能夠處理更多的請求。
3、memcache(記憶體對象緩存)
這個系統将讀寫操作都放到記憶體中進行。Memcache将任意資料都儲存在随即存取的記憶體中,而且能夠迅速的從中讀取資料。使用這種方式比任何使用磁盤的方式在性能上都要好一些。
原文: http://www.5iphp.com/zh-hans/resource/387.html
原文作者:jason