【问题标题】:Performance difference between echoing a large string variable and including a file containing it?回显大字符串变量和包含包含它的文件之间的性能差异?
【发布时间】:2014-10-17 18:14:45
【问题描述】:

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

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

//file1.php

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

//文件2.php

abcdef

//文件3.php

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

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

【问题讨论】:

  • 就我个人而言,我认为两者之间不会有太大的区别。这可能归结为偏好。
  • @ChrisForrence,我只是添加了代码示例以使情况更清楚。考虑到 $string 中的一个非常大的字符串,例如 1MB,它仍然没有太大区别吗?
  • @kavoir.com 据我所知,没有(因为您仍然需要获取文件内容才能操作模板)。需要考虑的事情:您可以使用file_get_contents() 获取文件的内容,它读取文件并将内容存储到变量中(结合您的两种方法)。另外,为什么不使用像 Twig 这样的现成模板系统?

标签: php string performance


【解决方案1】:

我自己尝试过,发现Output Control Functions 对于创建继承模板引擎非常有用。

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

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

查看documentation。如果您还有其他问题,请返回并提出另一个具体问题。

就性能而言,缓冲输出意味着您可以一次返回整个渲染输出,而不是每个回显语句。我相信这确实会提高性能。

另外,请考虑现有模板引擎实现之间的差异。对于 {{include template}}&lt;?php include('template') ?&gt; 之类的东西使用字符串替换和评估的引擎,其中 include() 缓冲 template.php 的输出,然后将其插入页面(这也可能是类似调用的结果)。我认为后者会更有效(尽管我没有证据或统计数据来支持这一点)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2021-04-03
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多