You are here

Drupal专业开发指南 第22章 特定于Drupal的最优化

大多数针对Drupal的最优化措施,都在软件堆栈的其它层次中进行,也有一些专门针对Drupal本身的最优化措施,这也能使性能得到极大提升。

 
页面缓存
有时,一些简单的事情会被忽略掉,这也是为什么需要再次提到它们的原因。Drupal拥有各种内置的方式,它能够通过为匿名用户存储和发送压缩了的缓存页面,来减少数据库的负重。通过启用这一缓存,你可以使用一个单独的数据库查询来高效的读取页面,而不是使用许多查询来获取页面(在没有缓存可用时就使用这种方式)。Drupal的缓存默认是禁用的,它可以在“管理➤站点配置➤性能”中配置。更多信息参看第15章。
 
带宽最优化
这是“管理➤站点配置➤性能”页面中的另一个性能优化措施,它能够减少发送给服务器的请求次数。通过启用 “优化CSS文件”特性,Drupal将处理由modules创建的CSS文件,压缩它们,并将它们合并成一个文件,放到你的“文件系统路径”下的css目录中。而 “优化JavaScript文件”特性可以将多个JavaScript文件合并成一个,放到你的“文件系统路径”下的js目录中。这将减少每个页面的HTTP请求数量,以及下载页面的整体大小。
当将一个页面存储在页面缓存中时,Drupal将会检查是否启用了页面压缩。这个特性默认是启用的,你可以在“管理➤站点配置➤性能”将其禁用。如果启用了的话,在页面存储到缓存中以前,Drupal将会检查PHP的zlib扩展(如果存在的话),并使用gzencode($data, 9, FORCE_GZIP)对页面进行压缩。当页面从数据库中取出时,Drupal判定当前浏览器是否支持gzip编码,如果支持的话,它就简单的将缓存数据返回。否则,缓存数据在返回以前,将会使用gzinflate()进行解压处理。详情请参看includes/bootstrap.inc中的drupal_page_cache_header()。
 
调优Sessions表
Drupal将用户会话保存到了它的数据库中,而不是文件中(参看第16章)。这意味着Drupal能够很容易的应用到多个服务器上,但是由于要管理每个用户的会话信息这也增加了数据库的负担。如果一个站点每天有成千上万的用户访问,那么很容得就会看到这个表将会极速膨胀。
你可以通过PHP来控制多长时间清除一次旧的会话记录。Drupal将这一配置放到了它的settings.php文件中:
 
ini_set('session.gc_maxlifetime', 200000); // 55 hours (in seconds)
 
垃圾收集系统运行周期,默认设置为两天多点时间。这意味着如果用户两天内没有登录,那么它的会话将被删除。如果你的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值的单位为分钟。
 

Drupal版本: