@
shiny 那么其实还是选择问题,我总归还是选模板引擎的,哪怕是自己一个人的项目。
就你提出的几点:
1、这个没错,确实让模板变得方便了很多。但我其实不觉得这是怂恿别人拿PHP当模板引擎来用。
2、我决定在写模板引擎之前就考虑过使用这种方式。但是最后还是放弃了。我自己的理由是:
A)不能将太多权利交给前端人员,这意味着他们不应该自己定义各种函数和处理方法;
B)通过模板调用任何内部方法都是不安全的,一个模板应该仅仅负责决定数据以何种方式展示,而不应该自己获得数据;
3、是的,
> 模板缓存文件的管理
> 模板更新时的刷新机制
> 类似 SAE 不支持的问题
这些问题是真实存在的。而且解决起来比较复杂:
第一个+第二个:老实说我没有办法优雅的解决当一个数据实体从数据库中删掉之后,它的模板缓存依然存在的问题。这种情况我只能在删除数据实体的方法里手动调用模板缓存文件删除过程,分布式之后这完全就行不通了(因为可能有很多个文件,于是我用Memcache+Eval了)。
还有一个问题是局部缓存刷新,模板的一部分内容需要更新,这个我没解决,模板缓存需要更新时会强制刷新真个模板的缓存。
SAE:事实上可以Memcache+Eval,但是效率低。
> 调试模板时增加难度
这个得看模板引擎怎么具体实现的。Smarty这样比较成熟的模板引擎貌似有调试机制,“轻量级”模板引擎比较难说。我自己的模板引擎反正是有的,虽然不是很完善,但是至少可以告知哪个标记没有合并或者哪个标记的参数格式出错,比如:
https://imgur.com/nTekxXx> 为什么要使用模板标记引擎
1、使用模板引擎可以让HTML中的代码大幅简化。通过模板中间转换码可以产生标准化代码,促进输出页面的安全性。
2、前端无需了解程序的其他细节,仅依靠更加简单的模板的语法和分配进模板的数据就可以让页面安全的输出,无需考虑何时手动进行无效数据效验等等细节。
3、使用一套模板引擎可以让前端开发人员将注意力集中在HTML和CSS本身的语法和管理上,不需要在一个语法体系(HTML,包括缩进,换行等)中维护另一种语法(PHP,各种<??>,各种if(): foreach():)。
4、编辑器里的颜色更加好看了(重复嵌套的尖括号),现在模板标记……可以统一变成白色了……呢。
另外除了模板引擎的标记,模板本身引擎还能带来这些好处:
1、直接将要输出的内容缓存在模板里:这意味着你可以直接以稍高于include的代价来输出页面,无需调用各种函数和方法来重新产生页面,这样可以使得网站的负载大幅上升。
2、基于上面这条,大部分模板引擎支持部分缓存,让你可以仅仅缓存一部分内容,比如页面通用部分等等。程序仅仅需要调用本页面需要的独特数据就可以产生整个页面。(当然,这回带来缓存失效的问题,双刃剑)
3、以上的管理都可以是自动的,通过参数进行控制,由模板引擎自动处理。可以在一定程度上降低后端程序员的工作量。
我们跑题跑得好远。