逆足问题/对字符串操作函数的调用过多

时间:2013-05-03 15:47:38

标签: php string templates optimization

这个问题是关于优化我用来在许多项目中作为常用工具添加的程序的一部分。 这个“模板解析器”旨在使用一种包含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过去,现在只是一堆of substr和pals)。

我正在使用的程序正在大量使用这些模板,它们即将展示它们的极限。

我的问题如下(不需要代码,只是想法或导致遵循):

  • 我是否应该考虑我已经滥用了这个并且应该尝试进行管理,以便我不需要对这些模板进行如此多的调用(例如,仅使用简单的视图脚本来改进缓存......)

  • 您是否知道一种技术解决方案,可以为数据提供一个不是我写的疯狂资源消费者的数据?在我写作的时候,我正在考虑XSLT,它是否合适,如果是的话可以提高性能?

提前感谢您的建议

1 个答案:

答案 0 :(得分:1)

使用XDebug扩展程序对您的代码进行概要分析,并确切了解代码的哪些部分花费的时间最多。