为了账号安全,请及时绑定邮箱和手机立即绑定

Yii框架不得不说的故事—高效篇(2)

withy PHP开发工程师
难度中级
时长 2小时27分
学习人数
综合评分9.80
77人评价 查看评价
9.9 内容实用
9.9 简洁易懂
9.6 逻辑清晰
  • //数据缓存中依赖关系详解 $cache = \Yii::$app->cache; //文件依赖 //1.实例化命名空间下的FileDependency文件依赖的这么一个类,在这个类的构造函数里传进了fileName为hw.txt(在basic/web下),生成$dependency对象。 $dependency = new \yii\caching\FileDependency(['fileName'=>'hw.txt']); //2.add方法的第4个参数把$dependency传递了进来,用途:当$dependency关联的hw.txt文件被修改或者说它的修改的时间发生变化时,所添加的file_key这条数据也会失效,那么通过get方法就取不出这条数据(或者说取出来的是bool型的false)。 //$cache->add('file_key','hello file cache!',3000,$dependency); var_dump($cache->get('file_key'));
    查看全部
  • //缓存数据有效期设置:数据加到缓存当中在一定时间内生效,过期自动释放掉。 $cache = \Yii::$app->cache; //$cache->add('key','hello cache!',15);//1.用add('keyname','value',s秒)方法的第3个参数。缓存只保存15秒 //$cache->set('key','hello cache!',15);//2.也可以用set()方法 echo $cache->get('key');
    查看全部
  • //数据缓存之增删改查(数据缓存:PHP中的某些变量和数据库中的数据,缓存数据需要把数据缓存到介质当中,比如说缓存到硬盘当中,叫做文件缓存;memcached内存技术;把数据缓存到数据库当中...) //要使用数据缓存需要指定把数据缓存到何处->需要对Yii框架进行配置(basic/config/web.php),在components组件里的cache组件里,Yii默认指定了使用FileCache文件缓存的方式。 //获取缓存组件 $cache = \Yii::$app->cache; //1.往缓存当中写数据,通过add('keyname','value')方法:在存储数据时,先看有没有对应的数据,如果有,则不会把这个数据再存到缓存当中。 //$cache->add('key1','hello cache!'); $cache->add('key1','hello cache1!');//5.清空缓存数据 //$cache->add('key2','hello cache2!'); $cache->add('key1','hello cache2!');//6.add()方法特别注意:如果add了2个key1。在它内部会判断第1个key1有没有值或者存不存在,如果存在或有值的话,后面的add就会失效,无法写值。这里只会打印出第1个key1的值。 //3.修改缓存数据,通过set('keyname','changedvalue')方法 //$cache->set('key1','hello new cache!'); //4.删除缓存数据,通过delete('keyname')方法;删除完之后,$data应该是空值,或者说get获取不到数据,就会返回一个false。通过var_dump打印数据类型。 //$cache->delete('key1'); //5.如果一开始写入很多缓存数据,要清空所有缓存数据,通过flush()函数。 //$cache->flush();//此时获取key1和key2都是失败的 //2.读取缓存数据,通过get('keyname')方法读取。再放进变量当中 $data = $cache->get('key1'); var_dump($data);//4.删除后打印数据的类型是否为false //print_r($data);
    查看全部
  • //实际上这个session组件在调用这行代码之前是不存在的,只有调用了这行代码,程序知道我们想使用session组件才会去加载进来。 //具体加载流程:当访问app应用主体里的session属性时,会触及PHP当中的__get()方法,在__get()方法里才会真正的把session组件加载进来,加载完之后会把session组件返回出来(通过$session变量接收)。 $session = \Yii::$app->session;
    查看全部
  • //Yii高效篇————组件的延迟加载:比如用户给Yii框架的项目发送了一个请求,index.php入口脚本文件最先处理这个请求->再把请求交给应用主体app处理(在处理请求之前,把它自己给实例化出来,实例化过程当中会去加载组件<-组件components[包含:session/request/response...组件])->app加载完组件之后再把请求交给Controller处理(控制器在处理请求时可以使用app加载过来的组件)。 //那么所谓的组件延迟加载就是:看起来好像是app预先加载了components里的组件,然后在Controller中直接拿过来用。实际上app并没有真正的加载components里的组件,而是在Controller里真正使用到某一个组件(如session)时才加载进来,也就是说把这个组件的加载过程由app的初始化延迟到Controller真正的使用某一个组件时。
    查看全部
  • HelloController.php //Yii高效篇————类的映射(class map)表机制:Yii框架也提供了类的映射表机制去进一步地更快加载类(常用的类,不建议不常用的类也放在$classMap中,会让在这个数组里查找相应的类的速率降低同时会占用更大的内存) //使用类的映射表去加载Order类,使用\Yii全局类里的$classMap['参数key:加载的类的全名','']数组,因为是要根据它的名字去加载它的绝对路径,所以这个数组的值就是Order类所在类文件的绝对路径。 \Yii::$classMap['app\models\Order'] = 'C:\wamp\www\mooc\yii\basic\modelsx\Order.php'; //实例化Order活动记录 $order = new Order;
    查看全部
  • //Yii高效篇————类的映射(class map)表机制:Yii框架也提供了类的映射表机制去进一步地更快加载类 //实例化Order活动记录 $order = new Order; //当PHP执行这段实例化Order代码的时候,不认识Order时会去执行自动加载的函数autoload($class),这个$class参数代表的不仅仅是Order,而是Order的全名,也就是把命名空间也加上(即app\models\Order); //然后autoload会根据全名,也就是$class去进行一个转换,将全名转换成它所在的磁盘下的一个真实路径(D:\...\models\Order.php),在Order.php类文件里声明了Order这么一个类,那么autoload会根据$class进行一些转化之后得到Order.php类文件; //那么这个转化过程是需要耗费一些时间的,并且Yii框架有很多的类,所以会进行很多的转换,为了减少转换的开销,所以引入了类的映射(class map)表机制(根据类的名字$class直接一步到位地获取磁盘上的绝对路径)。
    查看全部
  • 在框架启动最开始时,入口脚本index.php(basic/web)会执行Yii.php文件,这时候就注册了自动加载的函数autoload,以后PHP程序在执行的时候,遇到一些不认识的类的时候,就会通过autoload函数去自动加载各种各样的类的信息,以此来完成延迟加载,进一步提高程序的执行效率。
    查看全部
    0 采集 收起 来源:类的延迟加载

    2015-10-06

  • //spl_autoload_register()这个函数位于basic/vendor{这个文件夹存放Yii框架和第三方的类文件}/yiisoft/yii2/Yii.php{框架在启动最开始时会执行入口脚本index.php{basic/web},估计Yii.php会在index.php中去被执行}
    查看全部
    0 采集 收起 来源:类的延迟加载

    2015-10-06

  • lazy_loading/index.php //Yii框架也根据这种机制实现了类的延迟加载,做得更加地道(使用spl_autoload_register()自动完成类的加载)。 //4.当PHP发现实例化时不认识Class1,它会把Class1的名字传递给my_loader函数的$class参数当中,那么$class变量就代表了Class1。(同理,当PHP实例化Class2时也如此) function my_loader($class){ //3.但是这里不仅加载了Class1,还加载了Class2,导致类还是会被多余加载。怎样解决这个问题? /*require('class\Class1.php'); require('class\Class2.php');*/ //5.所以可以通过$class对require代码进行优化:把Class1改为$class变量,因为\具有转义的意思,所以需要2个\\来代表1个\。 require('class\\'.$class.'.php'); } //2.这是由于PHP准备报错时,这个函数告诉PHP先不报错,先去运行一下my_loader。然后PHP真的去运行my_loader函数,把里面的Class1类文件加载进来了。也就不会报错了。 spl_autoload_register(my_loader); $is_girl = $_GET['sex'] == 0 ? ture : false; if ($is_girl) { echo 'this is a girl!'; $Class1 = new Class1;//1.当PHP运行到这一行,不认识Class1并且在这里也没有加载类文件,这时候PHP八成会报错,但实际上并没有报错。 }else{ echo 'not a girl!'; $Class2 = new Class2; } lazy_loading/class/Class1.php class Class1{} lazy_loading/class/Class2.php class Class2{}
    查看全部
    0 采集 收起 来源:类的延迟加载

    2015-10-06

  • lazy_loading/index.php //使用类之前先把它们加载进来(require/include) /*require('class\Class1.php'); require('class\Class2.php');*/ //$is_girl变量可以根据浏览器发送过来的请求里的参数进行判断。 $is_girl = $_GET['sex'] == 0 ? ture : false; //if/else小瑕疵,每次发送过来的请求它只会实例化出来一个类,另一个加载的类就会显得多余。 //优化:把加载类的require语句放在if/else中进行,这样每次运行就会少加载一个类文件,提高了程序的执行效率,这就是类的延迟加载机制。 if ($is_girl) { echo 'this is a girl!'; require('class\Class1.php'); //实例化Class1 $Class1 = new Class1; }else{ echo 'not a girl!'; require('class\Class2.php'); //实例化Class2 $Class2 = new Class2; } lazy_loading/class/Class1.php class Class1{} lazy_loading/class/Class2.php class Class2{}
    查看全部
    0 采集 收起 来源:类的延迟加载

    2015-10-06

  • high performance
    查看全部
    0 采集 收起 来源:类的延迟加载

    2015-10-05

  • 延迟加载 缓存 Gii 快速开发工具
    查看全部
  • effective
    查看全部
  • 片段缓存设置: 1、缓存时间 $this->beginCache('cache_div',['duration'=>15]) 2、缓存依赖 $dependency = [ 'class'=> 'yii\caching\FileDependency','fileName'=>'hw.txt']; $this->beginCache('cache_div',['duration'=>$dependency]) 3、缓存开关 $this->beginCache('cache_div',['enabled'=>talse])
    查看全部
    0 采集 收起 来源:片段缓存设置

    2018-03-22

举报

0/150
提交
取消
课程须知
学习本门课程之前,建议先了解一下知识,会更有助于理解和掌握本门课程 1、掌握PHP基本的语言语法 2、对MVC开发方式有一定的了解
老师告诉你能学到什么?
1、YII的延迟加载 2、YII的多级缓存 3、GII工具的使用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!