+ -
当前位置:首页 → 问答吧 → an template 模板类新人类,使用简单速度超快

an template 模板类新人类,使用简单速度超快

时间:2007-01-22

来源:互联网

最近总是看到一些兄弟们在讨论模板的事,我想应该把我的模板类拿出来给大家分享了。
什么人适合用本模板:
1、喜欢简单的,不废力气就可学会使用的。
2、对速度要求比较高,特别是动态的论坛、博客。

an template
特点:简单与速度的结合。
1、简单。会用函数就成,全部学习时间3分钟。
2、速度快。编译型。使用函数代入变量的处理方式,这是最快的模板处理方法了。

an template 与phplib template相比的优点:
1、模板写法与phplib兼容。
2、自动编译,不需要设置。phplib需求手动设置比较累,尤其是要一层一层设置子模板更是很恐怖。
3、使用更简单,模板编成标准的类,直接调用就可。phplib要自己去调用。
4、封装了列表与2维表格的方法,极大降低了模板替换与循环的复杂度。phplib要自己去控制,没有经验的人很容易出错。
5、速度快,将模板编译成标准类,生成对象来调用,是函数与变量的操作,phplib是“解释”型的,是用字符替换操作。

模板文件tmpl_1.html
复制内容到剪贴板
代码:
<html>

<body>

{$_SELF['var']}

通过var:{var}

通过\$g_out['var']:{$g_out['var']}

</body>

</html>

tmpl_1_test.php
复制内容到剪贴板
代码:
<?php

include_once('../template.class.php');

$g_out['var'] = '我是全局变量var';

$tmpl_array['var'] = '我是模板变量var';

//--- 模板处理开始 ---------------------

// 生成模板对象

$T = new template();

// 设置模板文件名

$top = $T->set_file('tmpl_1.html');

// 执行模板方法,传值并显示

$top->main(T_ECHO,$tmpl_array);

?>
输出:
复制内容到剪贴板
代码:
<html>

<body>

我是模板变量var

通过var:我是全局变量var

通过$g_out['var']:我是全局变量var

</body>

</html>
不得不说的一些事:
1、本模板的目的是将显示部分分离出来,以消除代码混写的痛苦,请勿将本模板与smarty来比,两者解决的问题根本不一样。
2、本模板特点是使用简单、速度快,而不是功能的强大,如果需要想功能强大的模板,推荐smarty。
3、速度测试了吗?没有测的必要,在两年对比过代码混合方式,一点不慢,可以说如果你代码混合写得不好的话,还没有我的模板快。
4、这个模板最初是我在sina的时候写的,听说现在还有部门在用。经多次修改,代码已经全部重写,所以我可以放心的公开给大家。当初水平有限问题多多,向sina的兄弟们致歉。
5、感谢sina的领导和兄弟们,当时你们给了我灵感。
6、如果大家感觉好,介绍给你的朋友还有朋友的朋友。感觉不好或者Bug之类的,请与我联系[email protected],男奖饭1顿,女奖饭0顿。
7、免费使用、随意修改,代码里给兄弟我留个名就成。谁不想出名啊:)
8、这个类已经用了2年,但是最近又修改过,可能还会有些bug,发现Bug处理方法同6。
9、写了使用说明和用法示例,每个都测试了,真累,大周日的,兄弟们用得好了别忘记请我吃饭。

[ 本帖最后由 bluedoor 于 2007-1-22 23:03 编辑 ]

作者: bluedoor   发布时间: 2007-01-21

谢谢,bluedoor兄 支持!

给大家透露下,bluedoor 兄原来在sina工作,现在正是北京某知名网站的总监,希望大家多多关注啊。:D

作者: PHPChina   发布时间: 2007-01-22

呵呵!!! 研究一下

作者: terry39   发布时间: 2007-01-22

试了一下,确实很不错,谢谢

作者: error   发布时间: 2007-01-22

顶一个先,不过我想知道它的思路与传统模板比有什么不同或者优势?

作者: cysin   发布时间: 2007-01-22

我个人觉得最大的优势就是实用性更强。

作者: PHPChina   发布时间: 2007-01-22

其实,楼主的做法就是开源的思路,他不单开放出自己的代码,还分享出自己的想法见解。

我能理解楼主希望进一步获得发展的心情。

作者: PHPChina   发布时间: 2007-01-22

拿来学习学习,谢谢。

作者: 快乐基因   发布时间: 2007-01-22

谢谢楼主,不过想问问,对缓存的支持怎么样,功能无所谓,主要是缓存机制,可以设定缓存吗,以及缓存时间吗

作者: benzene   发布时间: 2007-01-23

不错,学习~~~

作者: 绿竹居   发布时间: 2007-01-23

不顶不行 感谢安然同学

作者: simonlin   发布时间: 2007-01-23

开源,开放,分享,交流

给bluedoor赞一个

新的开始,我们的论坛氛围越来越好了:牛人多了,交流的氛围浓了,PHP圈子有了

作者: carra   发布时间: 2007-01-23

引用:
原帖由 benzene 于 2007-1-23 12:46 发表
谢谢楼主,不过想问问,对缓存的支持怎么样,功能无所谓,主要是缓存机制,可以设定缓存吗,以及缓存时间吗
缓存是这样的,缓存加到模板里意义不大,而且层次不清晰。
对于一个程序来说基本上用页面缓存就够了。

作者: bluedoor   发布时间: 2007-01-23

引用:
原帖由 carra 于 2007-1-23 15:31 发表
开源,开放,分享,交流

给bluedoor赞一个

新的开始,我们的论坛氛围越来越好了:牛人多了,交流的氛围浓了,PHP圈子有了
希望以后能为大家多做点实事,原来为大家付出太少了。

作者: bluedoor   发布时间: 2007-01-23

引用:
原帖由 bluedoor 于 2007-1-23 16:14 发表


缓存是这样的,缓存加到模板里意义不大,而且层次不清晰。
对于一个程序来说基本上用页面缓存就够了。
我对PHP不是特别了解,我知道SMARTY,开启缓存的时候是生成HTML的文件,然后客户端在请求的时候,只是打开这个HTML文件,不知道你的设想思路是如何,不过还是感谢你提供这样的文件,呵呵,支持你

作者: benzene   发布时间: 2007-01-23

引用:
原帖由 benzene 于 2007-1-23 16:21 发表
我对PHP不是特别了解,我知道SMARTY,开启缓存的时候是生成HTML的文件,然后客户端在请求的时候,只是打开这个HTML文件,不知道你的设想思路是如何,不过还是感谢你提供这样的文件,呵呵,支持你
当初,有好多人建议我加上缓存功能,但是为了层次更清晰一些,所以没加。
如果使用类似smarty的页面缓存,就会导致页面缓存加的位置不够理想,呵呵,可能我们对效率要求高了。

作者: bluedoor   发布时间: 2007-01-23

不顶不行哈,学习下:lol

作者: myaxl2008   发布时间: 2007-01-23

谢谢您,学习下

作者: shenstef   发布时间: 2007-01-23

写的不错,支持一下啊

作者: wwwfk   发布时间: 2007-01-23

引用:
原帖由 cysin 于 2007-1-22 17:39 发表
顶一个先,不过我想知道它的思路与传统模板比有什么不同或者优势?
这个模板可以用来做大访问量的动态应用。而有一些模板做不了。可以说,动态应用使用中这个模板不会出现整体的瓶颈。

作者: bluedoor   发布时间: 2007-01-23

如何应用?看的有点晕!
为什么还生成PHP文件?

作者: 野草   发布时间: 2007-01-24

引用:
原帖由 野草 于 2007-1-24 09:13 发表
如何应用?看的有点晕!
为什么还生成PHP文件?
压缩包里有example目录,里面有详细的示例。
为提高效率使用“编译”处理,所以要生成PHP文件。

作者: bluedoor   发布时间: 2007-01-24

引用:
原帖由 bluedoor 于 2007-1-23 23:16 发表


这个模板可以用来做大访问量的动态应用。而有一些模板做不了。可以说,动态应用使用中这个模板不会出现整体的瓶颈。
这个想法非常好!个人认为也是这样的,就跟我不建议NFS共享一样,大访问量的应用尽量做到压力分担。不需要某个环节抠得太细。这样反而不利于项目的升级与维护,并且有潜在风险。

      就拿缓存来说,不一定有用户访问的就要缓存,数据库的处理能力还是很强的。缓存那些更新非常频繁就可以。另外缓存不一定要用文件,可以缓存数据即可,PHP在组装页面的速度还是非常可靠的。如果缓存整体页面会造成磁盘空间浪费或者IO压力增加(CMS静态化处理除外)。

作者: PHPChina   发布时间: 2007-01-24

引用:
原帖由 simonlin 于 2007-1-23 15:03 发表
不顶不行 感谢安然同学
你怎么知道他的名字?呵呵

作者: PHPChina   发布时间: 2007-01-24

可能认识吧

作者: leehui1983   发布时间: 2007-01-24

第一感觉有点像小强

作者: jame298   发布时间: 2007-01-24

能提供一些模板的资料么

作者: guoguolovessgg   发布时间: 2007-01-28

:) :)

作者: goshawk   发布时间: 2007-01-28

这个东西出自何处,楼主大人自己发明的吗?
到底好不好啊???????????、、、、、:(

作者: kaixin99   发布时间: 2007-01-28

顶一下,安然是以前做树型论坛那位开发者。

我最近也做了个很简单的模版,与其他模版引擎最大的不同就是编译出来的.php文件是脱离模版引擎来用的。这样把模版引擎的负担都消除了。

不过功能就比不上这个了。正好借鉴一下楼主的模版引擎。

作者: dualface   发布时间: 2007-01-29

引用:
原帖由 dualface 于 2007-1-29 21:34 发表
顶一下,安然是以前做树型论坛那位开发者。

我最近也做了个很简单的模版,与其他模版引擎最大的不同就是编译出来的.php文件是脱离模版引擎来用的。这样把模版引擎的负担都消除了。

不过功能就比不上这个了 ...
呵呵,你那套框架不错.
如果需要我可以帮你做与你框架的融合.

作者: bluedoor   发布时间: 2007-02-01

第89行可以改为
复制内容到剪贴板
代码:
  else {$this->file['final_filename'] = '../cache/' . $this->file['template_filename'].'_'.$this->version.'.php';}
这样的话,就可以把cache单独放在一个目录了

作者: 飞翔de希望   发布时间: 2007-04-10

改天测试一下效率,嘎嘎

作者: Phzzy   发布时间: 2007-04-10

我顶一下,回去试试.

作者: louis75168611   发布时间: 2007-04-11

:)

作者: 默默   发布时间: 2007-04-11

有个问题请教一下,set_file的时候怎么set一个数组啊?

作者: yhsmengdi   发布时间: 2007-04-16

谢谢,还要多学习。

作者: haitao   发布时间: 2007-04-20

支持...学习一下

作者: hiler   发布时间: 2007-04-20

来学习了

作者: 散步的男人   发布时间: 2007-05-20

大哥,看了你的模板,很不错,只是php做成像把jsp编译成servlet,可能效率不是很好
我认为还是编译成html里插入php标签的好

作者: fengye2751   发布时间: 2007-05-20

顶一下先!~~~~~~~~~~

作者: phpvista   发布时间: 2007-07-10

这么好的作品,受益非浅

作者: liexusong   发布时间: 2007-07-12

引用:
原帖由 飞翔de希望 于 2007-4-10 22:02 发表
第89行可以改为

  else {$this->file['final_filename'] = '../cache/' . $this->file['template_filename'].'_'.$this->version.'.php';}

这样的话,就可以把cache单独放在一个目录了
好像不行啊

作者: lifeibest   发布时间: 2008-01-31

不错的东西,先下回来研究研究..

作者: lifeibest   发布时间: 2008-02-01

支持实践中的原创!

作者: 小菜鸟   发布时间: 2008-02-01

太好了,就是改不好,有没有谁改一下,
把模板变量换成像 smarty 一样的 {$var},感觉 {$_SELF['var']}
还有就是增加一个编译后的目录,原有生成的编译文件和原文件放在一个文件夹里都混了.

作者: omcmc   发布时间: 2008-02-01

仁兄作品里这段程式
复制PHP内容到剪贴板
PHP代码:
$reg = "/<!--[ ]+BEGIN[ ]+(\w*)[ ]+-->/";
  if (preg_match($reg, $str, $m)) {
   $child = $m[1];
   $reg = "/<!--[ ]+BEGIN[ ]+{$child}[ ]+-->(.*)<!--[ ]+END[ ]+{$child}[ ]+-->/sm";
   preg_match($reg, $str, $m);

和PHPLIB里的
复制PHP内容到剪贴板
PHP代码:
$str = $this->getVar($parent);
        $reg = "/[ \t]*<!--\s+BEGIN $handle\s+-->\s*?\n?(\s*.*?\n?)"
             . "\s*<!--\s+END $handle\s+-->\s*?\n?/sm";
        preg_match_all($reg, $str, $m);

有一曲同功之妙

作者: lifeibest   发布时间: 2008-02-01

引用:
原帖由 streen003 于 2008-2-23 23:36 发表
仁兄作品里这段程式

$reg = "//";
  if (preg_match($reg, $str, $m)) {
   $child = $m[1];
   $reg = "/(.*)/sm";
   preg_match($reg, $str, $m);



和PHPLIB里的

$str = $this->getVar($parent ...
没错。语法与phplib是兼容的。

作者: streen003   发布时间: 2008-02-23

实在是不错。..支持

作者: bluedoor   发布时间: 2008-03-03

新手,怎末用这个模板啊?请教了

作者: yunfeier   发布时间: 2008-04-16

smarty的静态缓存感觉就是在扯淡。

也许是我对smarty不够了解,我先说说我的想法先。

使用smarty的页面执行流程是这样的,反正我见的不少使用示例都是这样:

1,从数据库等取出数据,对数据进行一些必要的运算或者处理
2,声明smarty类
3,设置需要在模板中显示的数据
4,输出模板

那么smarty的静态缓存是从哪个阶段开始输出的呢??
如果是在第一个步骤之前,那么无疑很有效果
但是如果是在第四步,那又有什么效果呢??

据说PHP执行的效率很高,一个页面的执行时间其实有90%是PHP在等待数据,如果smarty的静态缓存是在第四步才开始输出的,那么他省去的仅仅是10%中的部分,这有什么意义吗?

如果smarty的静态缓存输出实在第一步之前,那才有意义,如果是这样的话,我承认我说错话了。不过我还是要说的是,smarty的静态缓存还是扯淡,因为smarty太庞大了。将smarty包含进来,也许要比服务器仅仅输出一个静态文件花费的时间都还要长。

我个人认为,要想静态化,还是在输出列表的时候直接指向一个静态的页面。这样才不会使那些多花费的存储空间不至于花费的太冤枉。

作者: leebay0427   发布时间: 2008-04-27

感觉楼主的这种模式并不是太好。也许是我没有仔细看代码,说的武断了。

个人认为DZ的那种模式才是最好的。

include template();

在template中进行缓存有效性验证,有效的话返回缓存的路径,无效则加载模板编译部分的代码进行模板编译。

先说说页面的体积问题。体积越大,加载的时间就越长,DZ的这种模式,会极大的减小模板引擎的体积,因为template也就那么几行代码而已,逻辑也很简单。

而一个网站建成后,很少需要再去重新编译模板,因此,只这一点,就可以节省很多时间了。

还有一点,就是DZ的缓存相当于直接include进来的,因此,也就不需要再去为模板中要显示的数据,弄到模板函数或类中而浪费时间与性能,所有数据,在模板中可以直接使用。

楼主说的,利用函数来输出数据,我不太懂,难道能比直接echo还来的快吗???

作者: fhjr999   发布时间: 2008-04-27

谢谢啊!下来看看!

作者: fhjr999   发布时间: 2008-04-27

强人出的强大作品

作者: richardhc   发布时间: 2008-05-12