skrz / templating-engine
像 Smarty,但更快
v1.1.6
2021-03-16 09:09 UTC
Requires (Dev)
- jakubkulhan/phpeg: dev-master
- phpunit/phpunit: 3.7.32
- smarty/smarty: 3.1.39
README
像 Smarty,但更快
为什么?
在最大的捷克最佳价格搜索引擎 Skrz.cz,我们大量使用 Smarty。然而,Smarty 的官方实现不再满足我们的需求,主要是关于性能。
Skrz\Templating\Engine
与 Smarty 语法兼容。并非所有 Smarty 构造都已被实现。你可以把已经实现的部分视为 好的部分。
关键设计决策包括
-
编译时间和运行时间严格分离。当你使用 Smarty 中的
->display(...)
或->fetch(...)
时,会发生很多事情。Smarty 会检查模板是否已编译,编译后的代码是否仍然有效,缓存内容是否未被命中等。《Skrz\Templating\Engine》不会做这些。 -
编译由外部工具管理。在 Skrz,我们使用 Grunt 编译 CSS、JavaScript,以及在开发中编译模板。
-
编译输出是可自动加载的类,渲染应该封装在方法中。Smarty 将模板编译成一系列函数,它们位于
if
语句中,因此不能声明两次。随着即时编译 PHP 实现的出现(HHVM、PHP-NG、HippyVM),这相当不理想,因为某些优化无法应用(例如,HHVM 可以优化只包含顶级类的文件包含,仅填充类表)。
用法
Skrz\Templating\Engine
仅提供解析器和编译器。请参考测试了解它们的使用方法。
基本上,你只需要创建 ParserContext
,解析模板文件,创建 CompilerContext
,然后编译到输出文件。
假设,你当前目录中有一个名为 MyTemplate.tpl
的模板,并希望将其编译为 MyTemplate.php
$outputFileName = __DIR__ . "/MyTemplate.php";
$parserContext = new ParserContext();
$parserContext
->addPath(__DIR__);
->setFile("MyTemplate.tpl");
$compilerContext = new CompilerContext();
$compilerContext
->setParserContext($parserContext)
->setClassName("MyTemplate")
->setTemplate($parserContext->parse())
->setOutputFileName($outputFileName)
->dump();
许可证
MIT 许可证。请参阅 LICENSE
文件。