高效是YII框架的一个特点,在对YII框架的基础进行了学习之后,当然也要对YII框架是如何达到高效运行进行学习。首先针对YII的延迟加载进行学习
1. 类的延迟加载
在原生php中,我们一般是之间把所需的类直接全部require加载。但是,某一次的页面加载不一定会用到所有的类(比如加了if判断等等),如果可以在这个类确定用到之前再加载,想必可以使页面更高效。而YII就提供了spl_autoload_register()这个方法来实现。
function my_loader($class){ require ('class\Class1.php'); require ('class\Class2.php'); } spl_autoload_register('my_loader'); $is_girl = $_GET['sex'] == 0 ? true : false; if($is_girl){ echo "girl"; $class1 = new Class1(); }else{
$class1 = new Class2();}echo "boy";
2.类的映射表机制 (class map)
在用use引用命名空间之后,调用类的时候会在所引用的命名空间里面去寻找。如果可以给一个信息,可以直接找到这个类所在的class文件的话,可以节省一部分的查找时间。而YII框架的类的映射表机制 (class map)就是为了这种情况而设计的。
namespace app\controllers; use app\models\Order; class HelloController extends Controller{ public function actionAbout(){ \YII::$classMap['app\models\Order'] = 'D:\WWW\basic\models\Order.php'; $order = new Order; } }
但是不建议往类的映射表填入过多的映射,因为这样映射表内的查询会降低性能
3.组件的延迟加载
在进到页面时,需要加载很多组件,比如session,request。但并不是所有组件都一定会用到,如果可以在使用的时候再加载组件,就可以进一步提高效率。YII的组件已经自动封装好了这一特性。
$session = \YII::$app->session;//_get()方法调用
YII确实在很多小细节做足了功夫,使框架性能进一步优化,这些地方都是我们自己设计框架时没想到或者懒得做的,真是学海无涯