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


Performance difference between echoing a large string variable and including a file containing it?

我试图想出一个模板系统,使继承和扩展,所以最后的页面是由不同的开发人员/设计师编写的模板的不同层的结果。除了将模板存储在一个变量中,我想不出任何其他方法,这个变量可以被字符串替换函数搜索和操作。我真的不太喜欢这种方式,但有没有其他方法可以做到这一点?

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

//file1.php

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

abcdef
//file3.php

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

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

我自己尝试过,发现输出控制函数对于创建继承模板引擎非常有用。

实际的实现可能会变得相当复杂,所以我不打算讨论任何实现细节。

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

浏览一下文档。如果你还有问题,再回来问另一个具体的问题。

至于性能,缓冲输出意味着您可以在一次点击中返回整个呈现的输出,而不是每个echo语句。我相信这确实提高了性能。

还要考虑现有模板引擎实现之间的差异。引擎使用字符串替换和eval的东西,比如{{include template}} vs <?php include('template') ?>,其中include()缓冲template.php的输出,然后将其插入页面(这也可能是类似调用的结果)。我认为后者会更有效(尽管我没有证据或数据来支持这一点)。