我要做的是在网站的许多不同点上加载库如果尚未加载(CI的库,可以是自定义的库)。所以我想对此进行检查。
我在Loader库上搜索并找到了is_loaded()函数,所以我可以这样做:
if ($this->load->is_loaded('form_validation') === false) {
$this->load->library('form_validation');
}
这个奇怪的事情(启用了探查器)是内存上升,这让我想知道这是否正确。
答案 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