这个问题是关于优化我用来添加到许多项目中作为常用工具的程序的一部分。这个“模板解析器”被设计成使用一种包含 html 代码或其他带有几个特定标签的文本模式,并在呈现时用开发人员给定的值替换这些。
所涉及的少数类做得很好并且按预期工作,它允许在需要时隔离设计元素并轻松调整/替换设计块。
我使用的模式看起来像这样(我承认没有什么特别的):
<table class="{class}" id="{id}">
<block_row>
<tr>
<block_cell>
<td>{content}</td>
</block_cell>
</tr>
</block_row>
</table>
(下面的示例代码是改编的摘录)
解析会做这样的事情:
// Variables are sorted by position in pattern string
// Position is read once and stored in cache to avoid
// multiple calls to str_pos or str_replace
foreach ($this->aVars as $oVar) {
$sString = substr($sString, 0, $oVar->start) .
$oVar->value .
substr($sString, $oVar->end);
}
// Once pattern loaded, blocks look like --¤(<block_name>)¤--
foreach ($this->aBlocks as $sName=>$oBlock) {
$sBlockData = $oBlock->parse();
$sString = str_replace('--¤(' . $sName . ')¤--', $sBlockData, $sString);
}
通过使用类实例,我使用诸如“addBlock”或“setVar”之类的方法来用数据填充我的模式。
该系统有几个缺点,其中包括内存中的多个对象(每个块实例一个)以及在解析过程中对字符串操作函数的多次调用(过去 preg_replace,现在只是一堆 substr 和伙伴们)。
我正在处理的程序正在大量使用这些模板,它们即将显示出它们的局限性。
我的问题如下(不需要代码,只需要想法或线索):
我是否应该认为我已经滥用了这一点并且应该尝试管理以便我不需要对这些模板进行太多调用(例如改进缓存,仅使用简单的视图脚本......)
您是否知道一种技术解决方案来为结构提供数据,而不是我写的那个疯狂的资源消费者?当我在写作时,我正在考虑 XSLT,它是否合适,如果是的话,它可以提高性能吗?
提前感谢您的建议