回显大字符串变量和包含它的文件之间的性能差异?

时间:2014-08-24 12:22:01

标签: php string performance

我正在尝试创建一个支持继承和扩展的模板系统,因此最终页面是由不同开发人员/设计人员编写的不同模板层的结果。除了将模板存储在可以通过字符串替换函数搜索和操作的变量中,我想不出任何其他方式。我真的不喜欢这种方式,但还有其他方法可以达到这个目的吗?

如果我必须这样做,那就是将模板存储在变量中然后回显它们,性能方面的区别是什么(速度内存使用)而不是包含一个包含模板的文件?

// file1.php

<?php
$string = 'abcdef';
echo $string;

// file2.php

abcdef

// file3.php

<?php
include 'file1.php';
/* Or */
include 'file2.php';

考虑$ string中的一个非常大的字符串,例如超过1MB甚至更大,哪种方法在性能和内存使用方面更好?

1 个答案:

答案 0 :(得分:1)

我已经尝试过这样做,发现Output Control Functions对于创建继承模板引擎非常有用。

实际的实现可能会变得非常复杂,所以我不会详细介绍任何实现细节。

基本上,您使用输出缓冲区捕获输出。您可以通过构建输出缓冲区层来创建继承层次结构,然后以各种方式保留/放弃/组合输出。

浏览documentation。如果您还有其他问题,请回过头来询问另一个具体问题。

关于性能,缓冲输出意味着您可以在一次命中而不是每个echo语句中返回整个渲染输出。我相信这确实提高了性能。

另外,请考虑现有模板引擎实现之间的区别。对{{include template}} vs <?php include('template') ?>之类的东西使用字符串替换和eval的引擎,其中include()缓冲template.php的输出,然后将其插入到页面中(这也可能是类似的电话)。我认为后者会更有效率(虽然我没有证据或统计数据支持)。