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

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

withy PHP开发工程师
难度中级
时长 2小时27分
学习人数
综合评分9.80
77人评价 查看评价
9.9 内容实用
9.9 简洁易懂
9.6 逻辑清晰
  • lazy loading技术,yii懒加载技术依赖于php的spl_autoload_register(),注册一个自己的自动加载函数(autoloader),并插入到自动加载函数栈的最前面,确保yii的autoloader会被最先调用,类自动加载的这个机制的引入要从入口文件index.php 开始说起。 <?php defined('YII_DEBUG')or define('YII_DEBUG',false); defined('YII_ENV')or define('YII_ENV','prod'); //这个是第三方的autoloader require(__DIR__.'/../vendor/autoload.php'); //这个是yii的Autoloader,放在最后面,确保 其插入的autoloader会放在最前面 require(__DIR__.'/../vendor/yiisoft/yii2/Yii.php'); require(__DIR__.'/../../common/config/aliases.php'); $config=yii\helpers/ArrayHelper::merge( require(__DIR__.'../../common/config/main.php'), require(__DIR__.'../../common/config/main-local.php'), require(__DIR__.'../config/main.php'), require(__DIR__.'../config/main-local.php') ); $application=new yii\web\Application($config); $application->run(); 这个文件主要看点在于第三方的autoloader与Yii实现的autoloader的顺序,不管第三方的代码是如何使用spl_autoloader_register()来注册资金的autoloader的。只有yii的代码在最后面,就可以确保其可以将自己的autoloader插入到整个 autoloader栈的最前面,从而在需要时最先被调用 ?>
    查看全部
    4 采集 收起 来源:类的延迟加载

    2018-03-22

  • 非常不错的课程
    查看全部
  • 缓存中的依赖关系: $cache=\YII::$app->cache; 1、文件依赖(FileDependency):一旦文件改变,缓存将失效 $dependency=new \yii\caching\FileDependency(['filename'=>'hw.txt']); $cache->add('file_key','hello word!',3000,$dependency); 2、表达式依赖(ExpressionDependency):一旦表达式改变,缓存将失效 $dependency=new \yii\caching\ExpressionDependency(['expression'=>'\YII::$app->request->get["name"]']); 3、DB依赖(DbDependency):一旦数据改变,缓存将失效 $dependency=new \yii\caching\ExpressionDependency( ['sql'=>'select count(*) from user']);
    查看全部
  • 片段缓存设置: 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'=>false]);
    查看全部
    1 采集 收起 来源:片段缓存设置

    2018-03-22

  • httpcache缓存小实例
    查看全部
    1 采集 收起 来源:http缓存实例

    2015-11-09

  • Controller Generator(控制器生成器) Controller Class(填写上控制器类的名字,要写上命名空间):app\controllers\TestController 这个控制器里会有一些操作,一般情况下会自动生成一个index操作,当然也可以添加我们想要的一些操作。在index后面加上一个空格,这时就可以写另外一个操作test。这时控制器就会帮我们生成2个操作。以此类推。想生成3个操作,可以再加一个空格,写上操作名test2。 Action IDs:index test test2 一般情况下控制器里的操作都是需要去显示一个视图的,第3个参数View Path是控制器里的操作想显示的那个视图文件要存放在哪个路径里面,这个可以不用填。当不填时,视图路径就会放在views文件夹里面,views文件夹里会自动帮我们生成一个以控制器的名字Test为目录名的文件夹。 Base Class:表示TestController的父类是什么,默认是yii\web\Controller Code Template(代码模板):作用是:在上面这些配置信息最后需要生成具体的控制器和具体的各种视图文件时,中间会需要Template模板,Template模板里有一个程序,这个程序会去读取这些配置的信息,读完这些配置项这个程序就会用这些配置项去生成具体的控制器和视图文件。
    查看全部
  • public function behaviors(){ //4.每次刷新L都会向F发送请求,F都会运行actionIndex操作,从而每次通过file_get_contents读取http.txt文件里的内容,即使文件里的内容没有经过修改也会读取,如果这个文件内容很多,那么读起来也是比较费时的,所以需要lastModified和etagSeed对读取进行优化。 return [ [ 'class'=>'yii\filters\HttpCache', 'lastModified'=>function(){ //4.通过filemtime(filename)方法判断http.txt的修改日期有没有发生变化。这个方法会返回文件上一次的修改时间(时间戳)。 return filemtime('http.txt');//使用return方式把这个时间戳告诉L,等L第2次发送请求过来时,比对L和这边的时间戳是否一样,一样则让L使用缓存。 }, //4.如果F真的把http.txt里的内容修改了,还可以通过etagSeed判断修改后的内容和L里的内容是否一样,因为文件内容有可能改完又改回原样,内容没变化,但修改时间却改变了。 'etagSeed'=>function(){ //4.怎么判断文件新闻内容(分为标题和内容)有没变化?判断标题有没变化,如果没就简单粗暴认为文件内容没有发生变化。 $fp = fopen('http.txt','r');//以读的方式打开http.txt文件,打开之后会返回文件的句柄,把它保存到$fp变量中。 $title = fgets($fp);//通过fgets方式读取文件的第一行,保存到$title变量中:fgets需要2个参数,不写第2个参数表示开始从头读它的第一行。 fclose($fp);//通过fclose方式关闭文件 //把新闻标题$title作为etagSeed的种子,经过一定的转换后再传递给L,L下一次发送请求来时,如果lastModified发现filemtime发生变化,就让etagSeed判断$title有没发生变化。 return $title;//如果$title没发生变化,则简单认为http.txt文件内容没发生变化,那就不会执行actionIndex操作,file_get_contents就不会执行。 } ] ]; }
    查看全部
    1 采集 收起 来源:http缓存实例

    2018-03-22

  • 1.如何证明http缓存是缓存在浏览器这边的?右键审查元素->Network(可以监控捕获L发送给F的请求,F返回给L的响应)。F5刷新,数据@为F返回给L的响应数据。数据@有一个状态码304(Not Modified:未修改)。 L第一次给F发送请求时,F会乖乖生成数据@,把@以响应的方式发送给L,但F在发送@时可以要求L接收到@后把@缓存在L里面。然后L第2次访问F向F要数据时,F会比对L所要数据和@是否一样,一样则返回状态码304,告诉L所要的数据和@一样,直接使用L里的缓存数据,把缓存数据显示在页面当中就ok了。 2.F怎么告诉L接收到数据@后把@给缓存起来? 3.明明修改了F里的数据@,为什么L还是使用缓存的数据显示在页面当中?L使用缓存数据肯定是F返回了304的状态码,也就是说F认为F里的数据@和L的数据是一样的。那么F和L之间数据的对比依据是什么样子的呢?
    查看全部
    1 采集 收起 来源:http缓存位置

    2018-03-22

  • 什么是http缓存? 用矩形L代表浏览器,矩形F代表服务器。 1.当用户到F浏览网站或一个页面时,就会用L给F发送一个请求,然后F就会处理这个请求,处理完之后会把处理的结果作为一个响应返回给L,然后L从这个响应里拿数据,再显示出来,这样用户就可以看到他想看到的页面了。 2.但这时会遇到一个小问题,如果用户从F拿过来的数据不是他想要的数据(比如12306订票页面想订的票没有了),这时用户猛刷新L,那么L就会给F发送很多的请求,实际上F的数据是没有发生变化的,F收到这么多请求后都会照常的处理,但处理的结果没有发生变化,所以处理的结果跟第一次返回出去的数据是一样的。所以这样对F来说,很浪费资源、时间。 3.F想了一个办法,当F第一次把数据(小圆表示)发送给L时,它让L把数据缓存到L里面,也就是把它缓存起来,缓存起来以后如果下一次L发送了请求到了F这边之后,F会对比F这边的数据和L那边的数据是不是一样的(F是如何校验的呢?),如果是一样的那就没必要再把这个数据发送回给L了,就让L使用缓存里的数据就行了。 4.F如何校验F和L的数据是一样的,F就想了一个办法。当F第一次发送数据给L时,会在数据中塞入一个last-modified字段(记录了F这边数据的修改时间),那么L也有了这个字段。那么当L下一次发送请求时,会把这个修改时间也带上,也就是把lm(last-modified字段)发送回给F,F会校验lm和F里的那个数据的修改时间是否是一样的,如果是一样的那么这个数据肯定没有被修改过,那就没必要再发送回给L了,直接告诉L去使用缓存里的数据就行了。 5.另一种校验方式是基于last-modified的小缺陷设计出来的(开发人员把F的数据@改为#,然后又改回@,那么数据@虽然没变化,但它的修改时间改变了。那么L发送过来的lm和数据@的修改时间是对不上的,然后F又把@发送给L,但实际上@没有发生变化,这样也会造成一些问题)。所以F想了一个办法,F第一次发送@数据包时,会根据@里的内容生成一个标志etag,通过etag可以大概了解数据包@里的内容。F会把etag和last-modified一起发送给L,那么L下一次访问F时,会传lm和etag。那么F先验证lm(两边数据修改时间是否一样),一样则使用L的缓存;如果不一样,F则验证etag是否一样,如果一样证明@没有被修改,则让L使用缓存
    查看全部
    1 采集 收起 来源:http缓存简介

    2015-10-08

  • HelloController.php //Yii高效篇————片段缓存的使用 //片段缓存介绍(主要负责把前端界面的一些区域[不会经常变动的区域:如京东商品分类]缓存起来[缓存到内存或文件中],下次访问时直接从缓存里把数据拿出来,而不用再从数据库抓取信息,提高了程序的执行效率) return $this->renderPartial('cache');//显示cache视图(basic\views\hello) basic/views/hello/cache.php <!-- 使用视图组件($this)里的beginCache('缓存数据的名字')方法把cache_div给缓存起来;这个方法开启会检查当前有没有缓存,如果没有返回false --> <!-- 如何证明cache_div的代码片段被缓存了呢? 在两个div里都添加上相同的内容。如果cache_div被缓存起来将会使用缓存里的内容,而不会使用修改后的内容。提高了程序的运行效率。 --> <?php if($this->beginCache('cache_div')){?> <div id='cache_div'> <div>这里待会会被缓存(这里是缓存过后添加的)</div> </div> <?php $this->endCache();//结束缓存 } ?> <div id='no_cache_div'> <div>这里不会被缓存(这里是缓存过后添加的)</div> </div>
    查看全部
    1 采集 收起 来源:片段缓存介绍

    2018-03-22

  • //Yii高效篇————组件的延迟加载:比如用户给Yii框架的项目发送了一个请求,index.php入口脚本文件最先处理这个请求->再把请求交给应用主体app处理(在处理请求之前,把它自己给实例化出来,实例化过程当中会去加载组件<-组件components[包含:session/request/response...组件])->app加载完组件之后再把请求交给Controller处理(控制器在处理请求时可以使用app加载过来的组件)。 //那么所谓的组件延迟加载就是:看起来好像是app预先加载了components里的组件,然后在Controller中直接拿过来用。实际上app并没有真正的加载components里的组件,而是在Controller里真正使用到某一个组件(如session)时才加载进来,也就是说把这个组件的加载过程由app的初始化延迟到Controller真正的使用某一个组件时。
    查看全部
  • 延迟加载 缓存 Gii 快速开发工具
    查看全部
  • 学习中,还不错的
    查看全部
  • yii里有类的映射 \YII::$classMap[‘app\models\order’]='d:\www\basic\models\order.php' hashmap yii全局类的静态方法
    查看全部
  • ETag和last-modify作为Http的标准header,会令浏览器返回304 Not Modified
    查看全部
    1 采集 收起 来源:http缓存位置

    2015-07-12

首页上一页1234567下一页尾页

举报

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

微信扫码,参与3人拼团

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

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