老葛的Drupal培训班 Think in Drupal
过滤器系统有一个缓存层,极大的提升了性能。一旦为给定的文本片段运行完了所有的过滤器,该文本的过滤版本将被存储在cache_filter表中,在文本被再次修改前缓存的内容保持不变(使用过滤内容的MD5哈希值来判断是否被修改)。现在让我们回到前面的例子中,当文本未被修改时,我们就可以绕过过滤器直接从缓存表中加载10个节点的数据了---速度快多了!图11-7给出了过滤器系统处理流程的概览。
提示 MD5是一个算法,用来计算文本字符串的哈希值。Drupal使用它作为数据库中的一个高效的索引列,用来查找节点的过滤数据。
图11-7 文本过滤系统的生命周期
提示 对于包含大量内容的站点,通过将过滤器缓存移到一个内存缓存中,比如memcached,那么可以极大地提升性能。
现在你应该比刚才更聪明一点了,你可能会想,“好吧,如果在我们的nodeapi钩子中直接将过滤后的文本保存到node表中,那不更好吗?它的运行结果和过滤器系统可是一样的啊?” 尽管这一方法也解决了性能问题,但是你破坏了Drupal架构的一个基本原则:永不修改用户的原始数据。假定你的一个初级用户回过头来想编辑一篇文章时,当他看到很多内容都被包含在了HTML标签中时,我想他十有八九会向你打电话寻求支持的。过滤器系统的目标就是保持原始数据不变,同时可以在Drupal框架其余部分中使用过滤数据的缓存拷贝。这一原理应用在Drupal的各个API中,你将会经常看到。
注意 即便是禁用了Drupal页面缓存,过滤器系统仍将缓存它的数据。如果你看到的还是以前的过滤数据,那么可以导航到“管理➤站点配置➤性能”,点击底部的“清除缓存数据”按钮,来清空cache_filter表。