zoukankan      html  css  js  c++  java
  • smarty课程---smarty的处理过程是怎样的

    smarty课程---smarty的处理过程是怎样的

    一、总结

    一句话总结:编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译

    1、 smarty将php源文件,首先编译成中间文件

    2、 如果启用缓存,再根据编译文件生成缓存文件

    3、 之后每次访问都会访问编译文件

    如果启用缓存文件而且有缓存文件并且缓存文件没有过期,则直接访问缓存文件

     

     

    1、smarty的编译文件,缓存文件的特点是什么?

    编译文件是把源文件中的标签换成了php代码
    缓存文件是编译文件生成的全静态的html文件

    2、在什么情况下缓存文件会发生变化(刷新)?

    缓存文件过期
    模板文件发生改变

     考虑缓存:

    smarty程序里,判断是否开启了缓存文件,并且缓存文件没有过期,就去找缓存文件

    如果没有开启缓存文件,就去判断模板文件,如果缓存文件已过期,也是去判断模板文件。

    3、smarty如何开启缓存?

    a、直接在配置文件中
    b、在index.php入口文件中
    $s=new Smarty();
    $s->cacheing=true;

    4、静态缓存页面技术的实质是什么?

    静态缓存页面技术实际上是以空间换时间的技术:

    http://localhost/news.php?id=8比如这个是某门户网站的新闻页面,

    很多人访问,每次都要去数据库里查询,可以再第一次访问的时候生成一个html页面,以后的访问者都是访问这个静态页面)

    数据库--->静态页面

     

    5、用户访问smarty的时候是访问的哪个文件?

    如果缓存文件没有过期。默认访问的是缓存文件

    6、smarty不适合的网站是哪种?

    缓存默认是关闭的;缓存是把数据彻底的存在缓存文件里,直到缓存文件过期才会重新来缓存;所以说smarty在一些实时性特别强的网站里不是特别合适;

    二、smarty(原理概述)

    smarty(模板引擎,模板技术)

    使用smarty主要是为了实现逻辑和外在内容的分离;

    特点:

    1、速度快(因为第二次执行的时候使用第一次执行时生成的编译文件)

    2、缓存技术(正是因为缓存技术,使得smarty模板技术不太适合那些对于实时性更新要求比较高的,比如股票信息)

    3、插件技术

    4、缓存技术

    5、语句自由静态页面技术实际上是以空间换时间的技术:

    http://localhost/news.php?id=8比如这个是某门户网站的新闻页面,

    很多人访问,每次都要去数据库里查询,可以再第一次访问的时候生成一个html页面,以后的访问者都是访问这个静态页面)

    数据库--->静态页面

    分析模板技术:是利用php语言读取模板文件完成字符串替换掉的过程

    详解代码如下:

    html页面:
    <body>
    <font color = 'red'>{id}</font><br>
    <font color = 'green'>{name}</font><br>
    <font color = 'bule'>{age}</font><br>
    </body>
    
    
    后台逻辑部分
    //
    $id=8;
    $name='zhangsan';
    $age = 12;
    
    $str = file_get_contents('demo1.html');//模板文件的所有内容
    $str = str_replace('{id}', $id, $str);//替换id
    $str  = str_replace('{name}', $name, $str);
    $str = str_replace('{age}', $age, $str);
    echo $str;
    ?>

     面向对象技术实现模板功能的封装

     1 <?php
     2 class Template
     3 {
     4     //属性
     5     public $vars;                        //保存要替换的标记和数据的内容
     6     public $left_delimiter = '{*';        //左分隔符
     7     public $right_delimiter = '*}';        //右分隔符
     8     //方法
     9     public function assign($key,$value)
    10     {
    11         
    12         $this->vars[$key] = $value;
    13     }
    14     public function display($file)     //file表示模板名
    15     {
    16         $str = file_get_contents($file);    //从模板中读取多有内容,并将内容放入$str中
    17         foreach ($this->vars as $key => $value) //$key 键名(模板标记) $value 值
    18         {
    19             $str = str_replace($this->left_delimiter.$key.$this->right_delimiter, $value, $str);
    20         }
    21         echo $str;
    22         //file_put_contents('bak.html', $str);
    23     }
    24 }
    25 ?>

    注意:assign(‘name’,’zhangsan’);这句的时候其实还没有进行数据替换,而是把传入的数据保存在vars[]中,当display的时候才进行数据替换

    smarty的处理过程:

    1、 smarty将php源文件,首先编译成中间文件

    2、 如果启用缓存,再根据编译文件生成缓存文件

    3、 之后每次访问都会访问编译文件

    如果启用缓存文件而且有缓存文件并且缓存文件没有过期,则直接访问缓存文件

    (先不考虑缓存的时候的流程)

    编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译

    (编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)

    读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快

    第一次请求demo.php时候编译,产生编译文件,在编译文件里

    第二次请求demo.php的时候,判断模板文件是否改变,如果模板文件已改变,那么去读取模板文件,然后再编译,如果没有改变,则去读取编译文件,编译文件最终输出;

    缓存默认是关闭的;缓存是把数据彻底的存在缓存文件里,直到缓存文件过期才会重新来缓存;所以说smarty在一些实时性特别强的网站里不是特别合适;

     

     考虑缓存:

    smarty程序里,判断是否开启了缓存文件,并且缓存文件没有过期,,就去找缓存文件

    如果没有开启缓存文件,就去判断模板文件,如果缓存文件已过期,也是去判断模板文件。

     

    参考:smarty(原理概述) - RightDear - 博客园
    https://www.cnblogs.com/RightDear/archive/2012/11/06/2756218.html

     

     
  • 相关阅读:
    Linux 下卸载MySQL 5
    Solr使用入门指南
    GridView行编辑、更新、取消、删除事件使用方法
    从最大似然到EM算法浅解
    MySQL中数据表的增操作
    趣味Java算法题(附答案)
    nodeValue的兼容问题
    边记边学PHP-(十五)MySQL数据库基础操作2
    素数推断算法(高效率)
    expect
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9636932.html
Copyright © 2011-2022 走看看