【发布时间】:2014-09-23 21:44:34
【问题描述】:
这个问题是关于优化我用来添加到许多项目中作为常用工具的程序的一部分。 这个“模板解析器”旨在使用一种包含 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 和 pals)。
我正在处理的程序正在大量使用这些模板,它们即将显示出它们的极限。
我的问题如下(不需要代码,只需想法或线索即可):
-
1234563
您是否知道一种技术解决方案来为结构提供数据,而不是我写的那种疯狂的资源消耗者?在我写作时,我正在考虑 XSLT,它是否合适,如果可以,它会提高性能吗?
提前感谢您的建议
【问题讨论】:
标签: php string templates optimization