我們EmojiAll.com這個網站算是做得很精細、邏輯有些複雜,各種數據庫調用很多,不過因為數據庫服務器采用阿裡雲RDS、負載不算很高,所以速度上還是可以的,前期主要注重功能,沒有太注意性能優化。
最近因為ECS服務器搬家,發現新服務器的内網帶寬比以前增加很多倍,然後打開Drupal的Devel模塊查看數據庫調用情況,發現sql語句非常多,一個典型頁面調用sql語句達到800條之多,内容很多的頁面sql語句超過4000條,雖說都還是可以在幾秒内打開,但對于有優化強迫症的人來說,顯然是無法忍受的。😖
以前其實想過要通過Memcache這種鍵值對緩存來解決,但以前其它Drupal網站安裝Memcache模塊後,都是各模塊自動調用Memcache來優化的,我們沒有修改、開發過與memcache有關的程序,這次需要我們自己來調用memcache相關函數或者方法來解決,因為沒有搞過,所以也拖了很久。⏳
周末在網上搜資料也沒有現成的文檔,但打開模塊中的文件dmemcache.inc後就可以看得很清晰了,主要就是幾個與數據庫操作類似的“增删改查”函數:
- function dmemcache_add($key, $value, $exp = 0, $bin = 'cache', $mc = NULL, $flag = FALSE)
- function dmemcache_delete($key, $bin = 'cache', $mc = NULL)
- function dmemcache_set($key, $value, $exp = 0, $bin = 'cache', $mc = NULL)
- function dmemcache_get($key, $bin = 'cache', $mc = NULL)
經過這兩天對原來數據庫操作的修改,添加memcache緩存後的效果非常明顯:單頁面調用sql語句數量從幾百、上千下降到20多條,數據庫查詢時間從數百、上千毫秒下降到十幾毫秒,頁面生成時間從幾秒下降到1秒一下。🚀
再看ECS内網帶寬,比高峰期下降了一大截:
結論:如果覺得Drupal網站明顯很慢,可以打開Devel查看sql語句情況,發現數量過多的時候可以采取緩存措施,包括block緩存、views查詢和渲染緩存以及安裝Memcache模塊、自己開發程序來應用Memcache。
评论