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

Smarty

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

当初觉得Smarty很神奇,到后来发现也是经过PHP来实现的。再到后来别人反映使用Smarty会影响性能,因此也就想深刻了解一下它的源代码,看下它是怎么实现的,是否是真的会慢?html

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

UML静态结构 - 部分

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


分析与总结

一样,因为当时未能实时纪录,这里罗列一些关键类:thinkphp

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

相关文章
相关标签/搜索