fanso模板简介
fanso模板是php爱好者站为本站设计并使用的一套模板。为了方便fanso模板性能的改善和大家的使用以及自己的提高,所以将此模板公开。希望大家可以对它进行改善与扩充。该模板参考了smarty的源码和语法。语法与smarty大同小异,但更少的冗余代码和更快的执行速度。
为什么要设计fanso模板
MVC需要模板。MVC分别代表了"模型"、"视图"和"控制",目的就是让不同的开发角色在大中型项目中各司其职。在网络应用程序的开发中,如果可以将逻辑与表示分开,程序员和美工同时进行工作,那一定会大幅度提供工作效率。模板正是要实现这种功能。
传统模板的局限性。 smarty像php一样有丰富的函数库,从统计字数到自动缩进、文字环绕以及正则表达式都可以直接使用;smarty还可以通过插件的形式进行扩充。如此多的功能不可能在项目开发中都用到。像一些需要实时更新的内容,这类型的程序使用smarty会使模板处理速度变慢。不适用于小项目。小项目使用smarty会增加大量的冗余代码。因此smarty更适合于大中型项目的开发。使用smarty开发小项目会丧失php开发迅速的优点。
fanso模板,为用户定义了几种最基本最常用的语法。这些语法能够满足用户的基本需要。更少的冗余代码。更快的速度。
fanso模板是编译型模板
模板又分为编译型和解释型。解释型模板仅仅是对html里的变量进行替换。所以每次接到请求后都要对html里的变量进行替换一遍。这无余降低了程序的效率。而编译模板接到请求后,先判断是否第一次请求该url,如果是,将该url所需的模板文件编译成php脚本,然后重定向;如果不是,就是说该url的模板已经被编译过了,可以马上重定向。除了第一次编译的成本比较高之外,只要不修改模板文件,编译好的cache脚本就随时可用,省去了大量的解释时间。 而这就是编译型比解释型快的原理了。fanso模板是一个编译型模板。
fanso模板能做什么
fanso模板分开了逻辑程序和外在界面的内容,提供了一种更易于管理的方法,协调程序员和美工的工作。在web编程中,最好让应用程序逻辑远离页面表现, 页面表现远离应用程序逻辑。这将在以后使得系统更容易管理,程序更容易升级。
相对于传统的php编程,php脚本和html混杂在一起。使用模板更易于修改和维护。
fanso模板性能比较
下面用一个简单的程序对各种模板的性能进行测试。
section.php
<?php
function gettime()
{
$t = explode(" ",microtime());
return $t[1] + $t[0];
}
$start = gettime();
//require_once ("./libs/Smarty.class.php");
//$smarty = new Smarty();
require_once ("./libs/fanso.class.php");
$smarty = new Fanso();
$array[]= array("newsID"=>"001", "newsTitle"=>"第1条新闻");
$array[]= array("newsID"=>"002", "newsTitle"=>"第2条新闻");
$array[]= array("newsID"=>"003", "newsTitle"=>"第3条新闻");
$array[]= array("newsID"=>"004", "newsTitle"=>"第4条新闻");
$array[]= array("newsID"=>"005", "newsTitle"=>"第5条新闻");
$array[]= array("newsID"=>"006", "newsTitle"=>"第6条新闻");
$array[]= array("newsID"=>"007", "newsTitle"=>"第7条新闻");
$array[]= array("newsID"=>"008", "newsTitle"=>"第8条新闻");
$smarty->assign("News", $array);
$smarty->display("example4.tpl");
echo gettime() - $start;
?> ;
example4.tpl
<html>
<head>
<title>
fanso模板测试
</title>
<head>
<body>
{assign var="UserName" value="php爱好者"}
这里将显示模板内部定义的一个变量:UserName = {$UserName}
<table border="1" align="center">
{section name=loop loop=$News start=2 step=2}
<tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}">
<td>{$News[loop].newsID}</td>
<td>{$News[loop].newsTitle}</td>
</tr>
{/section}
</table>
{php}
echo "执行时间:";
{/php}
</body>
</html> ;
模板名称 | 第一次请求(秒) | 第二次请求(秒) | 第三次请求(秒) | 第四次请求(秒) |
Smarty | 0.73374891281128 | 0.044282913208008 | 0.031402826309204 | 0.053926944732666 |
fanso模板 | 0.056071996688843 | 0.022472858428955 | 0.013705015182495 | 0.016438007354736 |
可以看出,fanso模板速度更快,大家可以自行测试下。