Drupal7之drupal_static函数用法解析

Drupal7之drupal_static函数用法解析,第1张

Drupal7之drupal_static函数用法解析

本文的重点是大家详细介绍了Drupal7的drupal_static函数的用法,有需要的盆友可以参考一下。

Drupal7很强,实力的重点之一就是实体领域。比如节点/分类术语/用户都是实体,适用于字段,即客户可以随便给节点/分类术语/用户增加新的字段;

强势的背后是业绩的隐忧;如果添加的节点中有10个字段,则匹配10个表来加载字段数据信息,而不是一列,这导致至少10个连接来查询一个节点。这对数据库查询的性能是极其有害的,甚至是致命的;设想一个网页有10个块,每个块包含10个节点,每个节点有10个字段,那么查询表的频率是10次(应用entity_load_multiple),加入的频率是100次;

这个问题基本上没有立竿见影的办法。毕竟这是Drupal。

这里给大家展示一个性能提升的小方法,就是使用drupal_static函数。这种优化方法是PHP级别的,你必须掌握基本的PHP专业知识。

这个函数可以缓存文件函数实现的结果,保证函数实现撤回后结果保存在运行内存中。然而,与memcache不同,它会在请求完成后自动释放。

这里有一个例子:

目前网页上有两个区块:last_news区块和last_comment区块。内容规定是last_comment必须是10,第一条是last_news评论。如果还不够,按时间顺序去掉除last_news评论以外的项目。

分析之下,last_news块维护last_news数据信息,在last_comment中也需要这个数据信息,假设有一个方法可以调用它:news_last_news_data()返回这个last_news,

函数原型:
复制以下代码:函数news_last_news_data();

必须启用两次,所以数据库查询也必须查询两次,相对连接问题也会凸显出来。在并发的情况下,比如20,那么在数据库查询方面会有20个查询,工作压力还是有点吓人的。VPS在2GB运行内存中应该承受不了这种高并发;

我该怎么办?我们需要降低数据库查询的要求。经过分析我们可以看到,news_last_news_data()并没有使用主参数,它的作用只是查询。我们可以判断,每次启用,结果都一样。那么有什么办法可以缓存文件查询结果呢?

是啊!Drupal_static在这里。

看下面这段伪代码:


复制代码如下:FUNCTIONnews_last_news_data(){
$last_news=&Drupal_static(__FUNCTION__,array());
if(empty($last_news)){
//那么你可以在这里查询
$last_news=query();
}
return$last_news;
}

分析以下内容:

在第一行中,我启用了drupal_static()方法。第一个主参数是一个键,这个键是唯一的键。这里拼写变量定义__FUNCTION__表示 *** 作方法名是key,第二个主参数是初始值。当没有缓存文件时,应该使用空数组。

在第二行中,您添加了一个歧视。如果$last_news的缓存文件已经存在,则不执行查询,这样会使这个查询的工作压力减少一半。我们来跑一下,看看速度是不是很高!

后面的代码你应该看得懂!

这里还要注意:php5.1.13有一个BUG,在整个应用过程中都会遇到。意思是当使用use关键字启用隐名方法顶层的自变量,并且这个自变量来自于drupal_static的返回值时,隐名方法实现后顶层自变量的引入会发生变化,即这个自变量是后来引入的,所以这个自变量及其值不是drupal_static的返回值。这个BUG很复杂。我们来看看遇到后是否应用密名法。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/772101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存