好奇心:codeigniter中的自动加载过多会使应用程序变慢吗?

时间:2014-11-12 12:06:21

标签: php codeigniter autoload autoloader

我正在使用php和codeigniter,它有自动加载类。 我的第一个问题是,

If I use autoload class to load all model will it make my application slower? Or is there no effect?

我的第二个问题:

Which one is better and faster, loading all model you need using autoload class, Or load only some models you need in a class function?

2 个答案:

答案 0 :(得分:2)

1)自动加载类显然会使您的应用程序变慢。因为它使用php4 require函数来加载文件。有一些黑客使用php 5自动加载功能。希望,codeigniter的新所有者将添加对自动加载的支持。

2)最好使用特定于负载的模型而不是自动加载。在前一点我说明了这背后的原因。基本上,最好只加载所需的模型,帮助程序,库和资产。它确保您使用最少的时间和记忆。

答案 1 :(得分:0)

我使用自动加载。它的工作就像一个魅力,对装载时间没有重大影响。

方式

在您使用CI autoload.php

的任何库/模型之上添加此代码的和平

示例对我来说,我的config / autoload.php看起来像

$autoload['libraries'] = array('database','door','acl','form_validation','notify');

并在库/ Door.php中添加了

<?php//libraries/Door.php
function multi_auto_require($class) {
    #var_dump("requesting $class");
    if(stripos($class, 'CI') === FALSE && stripos($class, 'PEAR') === FALSE) {
        foreach (array('objects','core') as $folder){//array of folders to look inside
            if (is_file(APPPATH."{$folder}/{$class}.php")){
                include_once APPPATH."{$folder}/{$class}.php";
            }
        }
    }
}

spl_autoload_register('multi_auto_require');
class Door {

我在class Door{之上添加了此代码段,这样每次codeigniter加载门库时都会运行此代码段。

测试和基准测试 现在,对于基准测试,我在一个页面中测试了这段代码,该页面包含来自2个不同文件夹的8个自动加载对象的17个数据库查询,其中包含3个文件夹的数组。

<强>结果 对所有项目类使用上述方法V include_once 'classlocation.php'

两种方法的平均10页刷新,大约0.6秒; 所以你可以看到两种方法之间没有显着差异。

尽管我没有在不使用所有课程的网页上测试它,但我确信自动加载可以让我的CI生活更好,我对此感到满意。< / p>