PHP 中的简单模板/输出缓冲性能
Simple template in PHP / Output buffering performance
我在我的脚本中使用了非常简单的模板引擎:
<?php
require_once('some_class.php');
$some_class = new some_class();
function view($file, $vars) {
ob_start();
extract($vars);
include dirname(__FILE__) . '/' . $file . '.php';
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
echo view('template', array(
'content' => some_class::content(),
'pages' => some_class::pages(),
'meta_title' => some_class::$meta_title,
'meta_description' => some_class::$meta_description
));
?>
它运行良好,但我的脚本变大了,我正在添加新功能,有时在某些情况下加载页面需要很长时间。我的网页有时需要使用外部 API 并且有延迟。我如何重建它以在没有输出缓冲的情况下工作?
我认为根本没有理由使用输出缓冲。
<?php
require_once('some_class.php');
$some_class = new some_class();
function view($file, $vars) {
extract($vars);
include dirname(__FILE__) . '/' . $file . '.php';
}
view('template', array(
'content' => some_class::content(),
'pages' => some_class::pages(),
'meta_title' => some_class::$meta_title,
'meta_description' => some_class::$meta_description
));
?>
这做同样的事情,但没有缓冲区。如果您需要将呈现的模板作为字符串(这可能只发生在您的代码中的 1 个地方),您只能在那里使用输出缓冲:
ob_start();
view('template', array(
'content' => some_class::content(),
'pages' => some_class::pages(),
'meta_title' => some_class::$meta_title,
'meta_description' => some_class::$meta_description
));
$buffer = ob_get_contents();
ob_end_clean();
如果您更频繁地需要模板作为字符串,请将此逻辑包装在另一个函数中:
function render($file, $vars) {
ob_start();
view($file, $vars);
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
我在我的脚本中使用了非常简单的模板引擎:
<?php
require_once('some_class.php');
$some_class = new some_class();
function view($file, $vars) {
ob_start();
extract($vars);
include dirname(__FILE__) . '/' . $file . '.php';
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
echo view('template', array(
'content' => some_class::content(),
'pages' => some_class::pages(),
'meta_title' => some_class::$meta_title,
'meta_description' => some_class::$meta_description
));
?>
它运行良好,但我的脚本变大了,我正在添加新功能,有时在某些情况下加载页面需要很长时间。我的网页有时需要使用外部 API 并且有延迟。我如何重建它以在没有输出缓冲的情况下工作?
我认为根本没有理由使用输出缓冲。
<?php
require_once('some_class.php');
$some_class = new some_class();
function view($file, $vars) {
extract($vars);
include dirname(__FILE__) . '/' . $file . '.php';
}
view('template', array(
'content' => some_class::content(),
'pages' => some_class::pages(),
'meta_title' => some_class::$meta_title,
'meta_description' => some_class::$meta_description
));
?>
这做同样的事情,但没有缓冲区。如果您需要将呈现的模板作为字符串(这可能只发生在您的代码中的 1 个地方),您只能在那里使用输出缓冲:
ob_start();
view('template', array(
'content' => some_class::content(),
'pages' => some_class::pages(),
'meta_title' => some_class::$meta_title,
'meta_description' => some_class::$meta_description
));
$buffer = ob_get_contents();
ob_end_clean();
如果您更频繁地需要模板作为字符串,请将此逻辑包装在另一个函数中:
function render($file, $vars) {
ob_start();
view($file, $vars);
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}