我们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。
评论