文档章节

Smarty前端模板引擎 - 我看过的PHP开源框架

暗夜在火星
 暗夜在火星
发布于 2014/12/25 10:32
字数 1169
阅读 559
收藏 7
点赞 0
评论 0

Smarty

Smarty可以说是我接触PHP这门语言用到的第一个开源框架,当时在Smarty的帮助下,很好地完成了项目的开发,也很好地遵循了MVC的模式。但是到了后来,慢慢地发现,很多人都很熟悉Smarty,但是都不愿意使用它。大概的原因在于:慢。

当初以为Smarty很神奇,到后来发现也是通过PHP来实现的。再到后来别人反映使用Smarty会影响性能,所以也就想深入了解一下它的源代码,看下它是怎么实现的,是不是真的会慢?

其实,Smarty只是用PHP做了一个中间层,来把自定义的一些模板标签再转换成PHP语言,这里面涉及到语法树模式和PHP代码的自动生成。然而,计算机的艺术正在于此:任何的问题,都可以通过一个中间层来实现完成,但也会因此带来性能问题。所以,正是这一层中间层,影响了性能。但同时Smarty也努力通过缓存来填补这块的空缺。但对于好的项目分层、分离前端和后端,Smarty在开发实践中确实有好的作用,这就需要项目在人力成本和服务器成本之间做下权衡吧。

UML静态结构 - 部分

Smarty确实对外表现得很优秀,但是,Smarty里面的结构和代码层次,就个人看来,有些凌乱。以下是部分的UML结构图,其他待补充。


分析与总结

同样,由于当时未能实时纪录,这里罗列一些关键类:

Smarty_Internal_CompileBase(编译的标签,如:循环、赋值、中断等)

Smarty_CacheResource(缓存,如:key-value的缓存、自定义缓存等,这里应该还有引用的缓存)

_smarty_parsetree(语法树解析器,包括:文本、标签、代码等)

Smarty_Template_Source、Smarty_Resource(各种资源:代码、文件包含、字符串、编译/非编译)

由此引申

增加了中间层来实现对模板的解析,会影响性能,但这对人性化开发提供了很好的支撑。更为重要的是,模板引擎这个概念有很多其他框架也可以看到引用。如果觉得Smarty慢或者不符合自己的项目要求,则可以自己实现一套模板引擎规则的解析。例如ThinkPHP对模板的支持,更多信息请参见:http://doc.thinkphp.cn/manual/view.html。

这里可以有一个更深层次的转换,即对语法树模式的使用,这应该会涉及到特定领域语言DSL(更多信息可以看下这本书:《特定领域语言》)。它的作用是通过我们熟悉的语言来实现一些高难度的事情。比如我们觉得对于前端HTML开发人员使用PHP语言来输出数据是件痛苦的事情,那么我们提供类似<html>的标签给他们使用。

再深一层,比如我们(PHP开发人员)觉得用C/C++来开发PHP的扩展是件痛苦或者很高难度的事情,我们可以使用zephir来编写。

这里稍微说一下zephir,zephir是由phalcon(关于phalcon开源框架,后面会说到,不得不说,这是一个非常优秀的开源框架!)团队提供的一种可以用来开发PHP扩展的语言,官方文档请见:http://zephir-lang.com/index.html。它的机制也是通过自己的解析器对zephir的代码转换成C的代码,从而实现PHP扩展开发。

之前,我试着体验了一下zephir,感觉还不错,以下是当时一个尝试示例:[Zephir开发实践]用Zephir编写PHP扩展实践  http://my.oschina.net/u/256338/blog/284540






© 著作权归作者所有

共有 人打赏支持
暗夜在火星

暗夜在火星

粉丝 150
博文 160
码字总数 310930
作品 1
广州
程序员
ZNF

ZNF是一个PHP5 MVC框架。该项目的目的是提供一个开源框架用于开发PHP5企业Web应用程序。它的一些思想来自著名的Java MVC Web框架Apache Struts。ZNF框架的核心是一个灵活的控制层基于一些标准...

匿名
2008/11/18
612
0
Power2php

Power2php 是一个简单(非常的),开源,易扩展(升级),高效,面向对象的轻量级PHP MVC开发框架。Power2php的特点如下: 简单,将是你见过最简单的Framework,核心代码只有十几行 基于页面URL和表单...

匿名
2008/11/18
886
0
PHP模板引擎--tmd_tpl

·去TMD所有模板引擎 在讲解tmd_tpl的使用方法之前,我要先讲讲为什么要重新发明这个轮子。 那我们要从这世界上所谓的PHP模板引擎都为大家做了哪些贡献说起。 在PHP界谈模板引擎,必不可免的...

匿名
2012/03/13
1K
1
基于 PHP 的企业内容管理系统--MyfCMS

闵益飞内容管理系统英文缩写MyfCMS,采用PHP5+MySQL作为技术基础进行开发。MyfCMS的模板引擎使用了当前最流行的smarty模板引擎,MVC框架采用了自己研发的MyfMVC框架(特轻量级的PHPMVC框架,...

feiyue
2012/05/21
8.5K
0
PHP访问MySql数据库 中级篇 Smarty技术

阅读本文之前,推荐先参阅《PHP访问MySql数据库 初级篇》。 Smarty是一个使用PHP语言写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,将原本与HTML代码...

长平狐
2012/12/10
30
0
在PHP框架中需要使用smarty模板吗?

在 java 开发中使用模板已经习以为常了,很多人讨厌 java web 开发栈中的 JSP,虽然 sun 公司推出了 JSF,但总感觉出来的不是时候,一直也没有怎么用过。在 java 网站开发教程中,SSH 中的两...

justjavac
2012/09/03
0
3
轻量级phpMVC框架--MyfMVC

欢迎使用MyfMVC,MyfMVC是一个轻量级phpMVC框架,完全开源免费,旨在快速开发。可用于企业内部信息系统建设、中小型网站系统建设,本框架模板引擎基于最流行的smarty模板引擎。 环境要求: ...

feiyue
2014/11/26
651
0
PHP访问MySql数据库 中级篇 Smarty技术

阅读本文之前,推荐先参阅《PHP访问MySql数据库 初级篇》。 Smarty是一个使用PHP语言写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,将原本与HTML代码...

彭博
2012/04/12
210
0
Smarty 3.0.7 发布,php模板引擎

Smarty 3.0.7 在2月中旬发布。该版本修复了一些bug,性能改进,一文件访问漏洞的安全补丁。完整更新日志点击查看。 Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一...

老枪
2011/03/04
1K
0
教学互动平台

Teaching interactive web platform PHP教学互动平台 本系统的主要目标是实现网上互动教学功能,在总体上采用B/S架构(Browser/Server),教师通过浏览器在该平台发布课程资料和作业等信息,数...

quericy
2017/02/19
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ClassNotFoundException: javax.el.ELManager

这个是因为tomcat7中的el-api2.2,有些版本太低,建议升级tomcat到8.0,利用el-api3.0就会解决这个问题。

无语年华
8分钟前
0
0
Jvm堆内存的划分结构和优化,垃圾回收详解(详细解答篇)

在JVM中堆空间划分如下图所示 上图中,刻画了Java程序运行时的堆空间,可以简述成如下2条 1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代 2.新生代可以划分为三个区,Eden区,两个幸...

嘻哈开发者
20分钟前
0
0
CentOS 7.4 设置系统字符编码

1.语言变量LANG在 /etc/locale 文件中。 2.可以通过/ect/profile 来修改LC_TYPE 变量的值 添加如下代码 export LC_ALL="zh_CN.GBK" export LANG="zh_CN.GBK" 到profile文件中,变量的可以修改...

qimh
21分钟前
0
0
Kafka相关使用

安装前提,需要有jdk环境,还有zookeeper环境 zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/ zookeeper安装参考:https://www.jianshu.com/p/f7037105db46 kafka的下......

朝如青丝暮成雪
21分钟前
0
0
CentOS7 解决无法使用tab自动补全 tab代码提示

一、前言 对于刚刚开始学习linux的新人来说,linux的一切都显着神秘,只能惊叹于大牛在Linux上行云流水的操作。今天介绍一下在linux中自动补全的功能。 对于新人来说,在不懂得技巧的情况下,...

ziluopao
27分钟前
0
0
redis安装

https://www.cnblogs.com/feijl/p/6879929.html

ghou-靠墙哭
27分钟前
0
0
Spring核心——注解自动装载

从配置上扩展 之前的文章介绍了Spring的IoC容器配置管理方面的详细内容,需要了解的可以从IoC容器的设计模式开始阅读。在介绍基于注解配置的配置之前我们再重复一下在之前提到的基本认识: ...

随风溜达的向日葵
31分钟前
2
0
ElasticSearch学习(8)—— SearchType

Elasticsearch有四种类型的SearchType 1、query and fetch 向索引的所有分片(shard)都发出查询请求,各分片返回的时候把元素文档(document)和计算后的排名信息一起返回。这种搜索方式是最...

叶枫啦啦
32分钟前
0
0
MYSQL备份工具-mysqldump

介绍 mysqldump 是文本备份还是二进制备份 它是文本备份,如果你打开备份文件你将看到所有的语句,可以用于重新创建表和对象。它也有 insert 语句来使用数据构成表。 语法 mysqldump 的语法是...

郭恩洲_OSC博客
34分钟前
0
0
我的第一个go web框架

使用了beego等go web开发框架之后,感觉各种不方便,尤其是在接收参数、和自定义输出的时候,各种难受,定义各种model,这不是找事情嘛??尤其是在角色权限控制的时候我也感觉力不从心。。。...

独坐苔痕但观罗敷
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部