CodeIgniter - 如果尚未加载库,则加载库

时间:2013-10-28 08:24:54

标签: php codeigniter libraries codeigniter-classloader

我要做的是在网站的许多不同点上加载库如果尚未加载(CI的库,可以是自定义的库)。所以我想对此进行检查。

我在Loader库上搜索并找到了is_loaded()函数,所以我可以这样做:

if ($this->load->is_loaded('form_validation') === false) {
    $this->load->library('form_validation');            
}

这个奇怪的事情(启用了探查器)是内存上升,这让我想知道这是否正确。

1 个答案:

答案 0 :(得分:17)

在system / core / Loader.php的第914行附近,Codeigniter会检查库是否已加载,是否会再次加载。但是,这些检查也会占用一些内存。为了总结哪种方式最适合加载库,我做了一些基准测试(每次尝试后清理内存),结论如下:

  

只需使用$this->load...正常加载库并让Codeigniter处理它


<强>基准:

$this->load->library('session');

在初始加载Codeigniter会话类之后,我测试了加载库和/或执行检查的各种方法,如果它还没有加载。这些行中的每一行分别执行20次:


记忆消耗测试(不是速度!)

if(!$this->load->is_loaded('session')) $this->load->library('session');

消耗 48.256字节


if(!class_exists('ci_session')) $this->load->library('session');

消耗 39.824bytes


if(!isset($this->session)) $this->load->library('session');

消耗 31.904bytes


$this->load->library('session');

消耗 21.790bytes


重复测试一次后,结果是一样的,所以我猜它可能是相关的!如果我错了,请评论!


2014年7月8日。使用Codeigniter 2.2.0进行更新: 使用1000次迭代(不像之前那样20次)重复测试。结果保持不变。内存消耗如下:2128b,1856b,1688b,1456b

@Tim Dev在评论中指出,这个基准测试不需要显示最快的代码,但只显示最低的内存消耗代码。