返回顶部
首页 > 资讯 > CMS >Drupal7之drupal_static函数用法解析
  • 506
分享到

Drupal7之drupal_static函数用法解析

Drupal7drupal_static函数用法 2022-06-12 02:06:27 506人浏览 八月长安
摘要

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

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,

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

则需要调用2次,那么数据库也需要查询2次,相对的JOIN问题也会凸显,在并发量情况下,比如20,那么数据库来说就有20次查询,压力还是有点的怕,在1G内存下VPS应该是撑不住这个并发了;

怎么办?我们要减少数据库的请求,分析,我们看到news_last_news_data()不需要参数,功能也就是查询而已,我们断定每次调用返回的结果都是一样。那么我们有没有办法缓存查询结果?

有! drupal_static来了.

看下面伪代码:


复制代码代码如下:function news_last_news_data() {

$last_news = &drupal_static(__FUNCTION__, array());

if (empty($last_news)) {

// 那么我们在这里就查询

$last_news = query();

}

return $last_news;

}

分析如下:

第一行,我调用了drupal_static()方法,第一个参数是一个key, key是唯一键,这里使用魔法常量__FUNCTION__表示, 代表着使用方法名作为key, 第二个参数是默认值,当缓存不存在的时候使用一个空的数组替代

第二行,我加了一个判断,如果$last_news缓存已经存在,则不执行查询,这样就减少了这个查询的一半的压力,运行一下,速度是不是很块!

后面的代码你应该懂了吧!

此处还要注意:在php5.1.13有一个BUG, 也是我使用过程中遇到的,意思是当在匿名方法里面使用use关键字调用匿名方法上层的变量,且这个变量是来自drupal_static的返回值,那么匿名方法执行完后,会修改上层的变量的引用,也就是在后面引用到这个变量,那么这个变量以及不是drupal_static的返回值,所以缓存会失效。这个BUG说的很复杂,遇到后就看看是否使用了匿名方法吧。

--结束END--

本文标题: Drupal7之drupal_static函数用法解析

本文链接: https://lsjlt.com/news/32659.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Drupal7之drupal_static函数用法解析
    Drupal7 非常强大,其强大核心之一是entity field模式,比如node/taxonomy term/ user 都是一种entity, 并且支持field模式,也就是用户可以随意的添加新的field给nod...
    99+
    2022-06-12
    Drupal7 drupal_static 函数 用法
  • python解析之namedtuple函数的用法
    本篇文章给大家带来了关于Python的相关知识,主要介绍了python中namedtuple函数的用法解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下。【相关推荐:Python3视频教程 】源码解释:de...
    99+
    2024-04-02
  • Pandas数据分析之groupby函数用法实例详解
    目录正文一、了解groupby二、数据文件简介三、求各个商品购买量四、求各个商品转化率五、转化率最高的30个商品及其转化率小小の总结正文 今天本人在赶学校课程作业的时候突然发现gro...
    99+
    2024-04-02
  • Python-torch 之torch.clamp() 函数解析
    目录Python-torch torch.clamp() 函数解析1. 解析2. 对比扩展:torch.clamp()函数Python-torch torch.clamp() 函数解...
    99+
    2023-05-20
    torch.clamp() 函数 python torch.clamp() 函数 Python torch
  • Java之Pattern.compile函数用法详解
    除了Pattern Pattern.compile(String regex), Pattern类的compile()方法还有另一个版本: Pattern Pattern.compl...
    99+
    2024-04-02
  • Python笔记之Scipy.stats.norm函数使用解析
    目录Scipy.stats.norm函数解析调用方式用两种stats.norm主要公共方法如下总结Scipy.stats.norm函数解析 scipy.stats.norm函数 可以...
    99+
    2023-02-03
    Python函数 Scipy.stats.norm函数 Python Scipy.stats.norm
  • oracle 函数之分析函数
    1.分析函数有4个 over row_number dense_rank rank 四个 不能单独使用2.select empno, sal ,deptno,sum(sal) over(o...
    99+
    2024-04-02
  • Oracle分析函数用法详解
    一、概述 OLAP的系统(即Online Aanalyse Process)一般用于系统决策使用。通常和数据仓库、数据分析、数据挖掘等概念联系在一起。这些系统的特点是数据量大,对实时...
    99+
    2024-04-02
  • Oracle分析函数之开窗函数over()详解
    分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计值 ,并且每一组的每一行都可以返回一个统计值。 ...
    99+
    2024-04-02
  • JavaScript预解析之变量预解析和函数预解析
    首先了解预解析之前先看两个问题 1.大家思考下  这个结果会是多少呢? console.log(num); var num=10; 结果是 undefined 2.这个输出...
    99+
    2024-04-02
  • Python数据分析之NumPy常用函数使用详解
    目录文件读入1、保存或创建新文件 2、读取csv文件的函数loadtxt3、常见的函数4、股票的收益率等5、对数收益与波动率6、日期分析总结本篇我们将以分析历史股价为例,介...
    99+
    2024-04-02
  • Python数据分析之pandas函数详解
    目录一、apply和applymap二、排序三、处理缺失数据一、apply和applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df...
    99+
    2024-04-02
  • python中namedtuple函数的用法解析
    源码解释: def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None): ...
    99+
    2024-04-02
  • 解析pandas apply() 函数用法(推荐)
    目录Series.apply()apply 函数接收带有参数的函数DataFrame.apply()apply() 计算日期相减示例参考理解 pandas 的函数,要对函数式编程有一...
    99+
    2024-04-02
  • C++ 函数的重载用法解析
    函数重载允许使用相同名称创建具有不同参数列表的函数,从而实现代码灵活性。规则包括:函数名称相同,参数列表不同,可不同类型或数量。例如,计算面积的类包含针对不同形状的重载函数,可根据形状类...
    99+
    2024-04-18
    c++ 函数重载
  • C语言之strtol函数用法详解
    strtol 函数用法 strtol是一个C语言函数,作用就是将一个字符串转换为长整型long,其函数原型为: long int strtol (const char* str,...
    99+
    2024-04-02
  • python基础语法之函数应用实例分析
    这篇“python基础语法之函数应用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python基础语法之函数应用实例...
    99+
    2023-06-30
  • JavaScript立即执行函数用法解析
            我们知道,在一般情况下,函数必须先调用才能执行,如下所示,我们定义了一个函数,并且调用, fu...
    99+
    2024-04-02
  • drupal之hook_link和hook_link_alter钩子函数解析
    本文实例讲述了drupal中hook_link和hook_link_alter钩子函数的用法。分享给大家供大家参考。具体如下: 在Drupal中有个钩子,叫做hook_link,参数如下:复制代码代码如下:hook_li...
    99+
    2022-06-12
    drupal hook_link hook_link_alter 钩子函数
  • SQL之patindex函数的用法案例详解
    语法格式:PATINDEX ( '%pattern%' , expression ) 返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算。 pa...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作