6

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

我已经对 Loader 库进行了搜索,并找到了 is_loaded() 函数,所以我可以这样做,例如:

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

这个(启用分析器)的奇怪之处在于内存上升,这让我想知道这是否是正确的方法。

4

1 回答 1

18

在 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.824 字节


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

这消耗了 31.904 字节


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

这消耗了 21.790 字节


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


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

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

于 2014-05-11T19:58:50.830 回答