rod*_*ehm 23
"取决于"是您所有问题的答案.
什么是"更快"?执行时间处理时间?开发时间?保养?内存开销?它们的混合物?模板引擎通常以某种性能(速度,内存)进行交易,以便更好地进行开发和维护.
如果你在谈论纯动态模板(意思是:在每个请求上评估模板),PHP将超过任何模板引擎.真的,这是一个nobrainer.如果您考虑缓存,像Smarty这样的模板引擎可能会有所帮助.不过,在纯PHP中,缓存并不是你自己无法实现的.有了Smarty,它就是为你完成的(并且比你想象的要复杂得多).
如果您使用的是Symfony框架,那么使用Twig可能是明智之举,因为Twig和Symfony是紧密集成的.当然你可以使用Smarty或普通的PHP.这里的问题是:它是否切实可行?
从数据库(如数据库或远程API)构建网站时,缓存很有意义.你真正节省的(在减少意义上)这里是数据库调用,密集计算等.检查你是否有任何时间密集的功能来构建你的网站.如果是这样,请使用缓存(如果可以).
了解开发/维护/便利性/性能权衡,我会(总是)建议使用模板引擎.作为一名Smarty开发者,我当然建议使用Smarty.除非你使用Symfony,否则你可能会更好地使用Twig.或者其他一些框架以其他模板引擎为特色.
请忽略像Smarty vs. Twig这样的帖子,因为他们只比较非常有限的引擎视图.不要相信你没有伪造自己的基准测试™.
但总的来说,Smarty 3.1比Twig快一点.Twig在运行时(正在执行模板的时候)正在做很多事情,Smarty在编译时(在准备执行模板的时候)做了很多事情.Twig并没有真正在这里惹恼速度.Twig需要在运行时通过设计来做某些事情.他们为了一些"Convenienve"交换了一些性能(例如,使用相同的表示法访问数组和对象).
让我们撕掉与此主题相关的转义:
1.将逻辑排除在演示文稿之外 - 不要将"代码"放入HTML中
任何说出这个然后告诉你使用模板的人都是矛盾的:
他们必须停止对自己撒谎.他们的"模板语法" 是一种建立在另一种语言之上的编程语言,而这种编程语言又构建在另一种语言之上- 这是低效,冗余和奇怪的.
此外,我没有看到每个模板引擎所依赖的变量的存在是如何被视为逻辑的 - 它们的存在,内容和实现依赖于逻辑后端.
那些使用if/else语句和for循环的模板系统是什么?这就是逻辑的本质 - 大多数编程语言都使用的概念.它们需要可变数据,这些数据只能通过某种形式的计算生成或存在.
如果不将表示与逻辑混合,则无法提供动态内容.不可能.
2.1它更安全......
那么,你不相信你的HTML人吗?
案例:您认为您的HTML/CSS人员很愚蠢,会不小心打印数据库密码
如果是这样,我有新闻 - 如果可以从程序中的任何地方访问/修改敏感数据,那么您的环境已经不安全了.
案例:您认为您的HTML人员将打印随机服务器常量 - 允许他作为个人使用服务器逻辑是危险的
我明白了 - 他要么是愚蠢的,要是讨厌自己的工作而想要被解雇,因此会像打印会话变量一样愚蠢.很好,但我要说......
...为什么这个东西不是经过同行评审的?即使他无法获得直接的服务器逻辑,而是一个花哨的模板系统,他仍然可以平等地分散他的愚蠢/仇恨,仅仅是因为他对输出有最终决定权.或者,他甚至可以与另一个程序员(如果有的话)进行合作,并且仍然可以访问服务器常量和co.
-
2.2.1好的模板引擎会自动清理输出,或允许模板人自己做 - 当数据需要消毒时,他知道更好
你假的.
您不知道什么时候应该对输出进行消毒?你自己不能这样做..?
即便如此,也许你只是代码猴子,HTML人是一个网络安全的HTML注入专家,他应该是一个消毒输出.在这种情况下,让他访问PHP也允许他使用喜欢的htmlspecialchars()
东西,而不是模板给他做同样的事情.
关于自动转义,只要您安全地传递内容,就可以在您正在执行的代码中实现这样一个简单的功能.
-
2.2 ......我可以控制正在处理的数据
考虑类,函数等 - 您将数据放入,它们使用它,然后您得到一个结果.通常他们不处理外部数据,除非交给他们(否则不清楚,危险和不好的做法 - 除了一些常数).通过这些相同的方法,您可以在高效,清晰和无限的庄园中准确传递您所需的输出.
-
所有这一切,似乎你认为你的模板引擎比普通代码更安全的原因是因为你缺乏一些安全性的几个方面:
3. PHP语法太难/难以教导风格的人
事实是它并不比Smarty等模板系统创建的伪语法复杂,所以如果这是一个问题,那么动态内容不适合你.
以下是PHP的"短语法" - 这太难了吗?
<div class='username'><?= $username ?></div>
4.开发自己的解决方案太过分了
虽然我认为不是,但你可以自由选择任何你想要的东西!选择最适合您需求的产品.它们通常是免费的,不易于集成,并且具有开箱即用的大量功能.
我的印象是,大多数人选择模板只是因为它在文件中看起来"整洁" - 他们喜欢认为TPL文件是他们创建的一些特殊内容,他们喜欢语法的样子; 好像通过一些魔法,变量被小符号@
或#
符号"调用",并从逻辑跃点到输出.
这似乎是一个诡计 - 美丽的女巫(AKA模板引擎)以她的美丽吸引你.虽然她吸引眼球,但她真的是一个吸血鬼的恶魔并提取你的灵魂(服务器资源)以换取其他人看不到的眼睛糖果(你的用户更愿意拥有一个更快的网站和更多的功能由$$$你资助'重新节省电力/服务器租用)
<title>{{@title}}</title>
Vs
<title><?= $title ?></title>
Run Code Online (Sandbox Code Playgroud)
我承认,只有一个案例我可以想到哪些模板与PHP有任何关系 - 可移植到其他应用程序.appartisan的答案解决了这个问题.即便如此,它不是难以替代<?= $var ?>
用{{@var}}
- 这是一个模板式的系统工作.
我将再次讨论这个问题,因为事情已经发生了重大变化,而且之前的答案中缺少一些证据。
没有深入了解为什么框架使用模板引擎而不是 PHP 的原因。出于某种原因,一直在努力用另一个抽象层“修复”PHP。始终声称简单而不会损失多功能性或性能。
无论如何,使用 PHP 仍然是最快和最通用的模板方式。PHP 在其最早的化身中看起来很像一种模板语言。但是让我们看看 PHP 中的进步,并将它们与after 层并排放置。
Twig 和其他一些人声称缓存一些东西,这在早期版本的 PHP 中总是一个插件。缓存现在是PHP5.5+ (Opcache)的默认部分,因此使用 PHP 作为模板语言将提供更多的性能增强。
Twig 和其他人声称为设计师提供了简单的语法。在比较模板引擎的语法时,您会发现逻辑与使用模板系统(如 Twig)的唯一好处相似,它是设计器和底层系统代码之间的另一层安全隔离。
两个非常流行的 CMS Wordpress 和 Drupal 使用 PHP 作为它们的模板引擎。因此,在设计网站时使用模板引擎来保护和简化 PHP 的使用的旧论点在当今的网络中并不真正有效。虽然 Drupal 8 正在转向 Twig,但主要是因为 twig 是 Symfony 框架的一部分(回到为什么框架使用模板引擎)。另一方面,Wordpress 仍在使用 PHP。随着 Wordpress 的飞速发展,网页设计师使用 PHP 来帮助实现这一目标。Drupals 社区也部分地因为决定使用 Twig 和 Symfony 而分裂。
因此,就性能而言,使用 PHP 似乎是更好的选择,但也是主题和设计人员的偏好。至少所有的证据都会导致这个结论。
话虽如此,这是我毫无根据的意见。我认为在今天的网络中使用 PHP 以外的任何东西作为模板引擎涵盖了底层框架或网络应用程序架构中的一些固有弱点。这个弱点是它的复杂性和复杂性,在设计师或主题层面无法轻易解释。
如果您正在编写一个必须很小的轻量级应用程序。使用 PHP 保持小规模和最佳性能,并将其他引擎留给“企业”级别的组和项目
小智 5
简单而纯粹的意见,我认为唯一的优势是可移植性.您可以将模板引擎中的模板或视图重用到其他后端应用程序中.假设您正在将应用程序从PHP迁移到Java,则无需重构模板.
否则,您将增加复杂性,添加其他执行层(更多时间),维护应用程序的更多要求(您需要知道该模板引擎的人员),等等.PHP本身它是你将获得的最好和更有特色的模板引擎,可能是最快的,你也可以进行缓存,具有从后端应用程序控制缓存的优势,而不是从视图.
归档时间: |
|
查看次数: |
12656 次 |
最近记录: |