下面是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 (), 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將任意數據都保存在隨即存取的內存中,而且能夠迅速的從中讀取數據。使用這種方式比任何使用磁盤的方式在性能上都要好一些。