首页 > 网站 > 建站经验 > 正文

Drupal7之drupal_static函数用法解析

2024-08-30 19:05:44
字体:
来源:转载
供稿:网友

Drupal7 非常强大,其强大核心之一是entity field模式,比如node/taxonomy term/ user 都是一种entity, 并且支持field模式,也就是用户可以随意的添加新的field给node/taxonomy term/user;

强大的背后是性能的担忧;加入node有10个field,那么就对应10个表来装载field数据,而不是一个列,这就导致了至少10个join 去查询一个node. 这对数据库的性能影响是巨大,甚至是致命的;试想,如果一个页面有10个block, 每个block包含10个node, 每个node有10个field, 那么查询表的次数就是10次(使用entity_load_multiple),join的次数是100次;

我们几乎没有直接的办法解决这个问题,毕竟这就是Drupal.

在这里我们提供一个小的性能优化办法,即使用drupal_static函数,这个优化方法是PHP级别的,需要了解基本的PHP知识。

这个函数可以缓存函数执行结果,保证在函数执行退出后,结果存在内存中,但是又不同于memcache,它在一个请求结束后就自动释放。

这里举个例子:

现在有这样子的需求,页面上有2个block: last_news block, last_comment block,内容要求是last_comment 需要10条,首先取last_news 的comment, 如果不足,则按照时间先后顺序取出除了和last_news comment 匹配的项;

分析下,last_news block保护了last_news 数据,在last_comment 也需要这个数据,假设有方法叫: news_last_news_data() 返回这个last_news,

函数原型:

复制代码
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表