【问题标题】:Code optimalisation with concatenation使用连接进行代码优化
【发布时间】:2012-11-23 02:39:01
【问题描述】:

在我的 PHP 脚本中,我将很多 HTML 与一些 PHP/MySQL 数据混合在一起(第一个示例)。通常,我的代码看起来很乱,因为您不能将任何结构带入这种代码组合中。

所以,我想知道,第二个脚本是否比第一个脚本慢(或性能更低)?

第一个脚本

$message = <div class="label" style="width:200px; float:left; text-align:right;">Organisation:</div>   
<div class="input" style="margin-left: 210px;"><b>' . $item1[0]['organisation'] . '</b>
</div><div class="label" style="width:200px; float:left; text-align:right;">Group:</div> <div class="input" style="margin-left: 210px;"><b>' .
  $item1[0]['group'] . '</b></div><div class="label" style="width:200px; float:left; 
text-align:right;">Name:</div> <div class="input" style="margin-left: 210px;"><b>' . $item1[0]['firstname'] . ' ' . $item[0]['lastname'] . '</b></div>

第二个脚本

$message  = <div class="label" style="width:200px; float:left; text-align:right;">Organisation:</div>   
$message .= <div class="input" style="margin-left: 210px;"><b>' . $item1[0]['organisation'] . '</b></div>
$message .= <div class="label" style="width:200px; float:left; text-align:right;">Group:</div> 
$message .= <div class="input" style="margin-left: 210px;"><b>' .$item1[0]['group'] . '</b></div>
$message .= <div class="label" style="width:200px; float:left; text-align:right;">Name:</div> 
$message .= <div class="input" style="margin-left: 210px;"><b>' . $item1[0]['firstname'] . ' ' . $item[0]['lastname'] . '</b></div>

或者有没有更好的方法来处理 PHP 生成的 HTML 页面?

【问题讨论】:

    标签: php html optimization


    【解决方案1】:

    同意无情。您没有性能问题,而是维护问题 ;-)

    我建议你看看这个示例代码,看看你能做些什么。

    <form method="post" action="add_url_here">
        <label>
            Organisation:
        </label>
        <input type="text" name="organisation" value="<?php echo $item1[0]['organisation'] ?>" />
    
        <label>
            Group:
        </label>
        <input type="text" name="group"  value="<?php echo $item1[0]['group'] ?>" />
    
        <label>
            Name:
        </label>
        <input type="text" name="name"  value="<?php echo $item1[0]['name'] ?>" />
    </form>
    

    对于样式:

    <style>
        label {
            width:200px; 
            float:left; 
            text-align:right;
        }
    
        input {
            margin-left: 210px;
        }
    
    </style>
    

    你甚至可以这样做:

    $message =
      '<form method="post" action="add_url_here">
        <label>
        Organisation:
        </label>
        <input type="text" name="organisation" value="' . $item1[0]['organisation'] . '" />
    
        <label>
        Group:
        </label>
        <input type="text" name="group"  value="' . $item1[0]['group'] . '" />
    
        <label>
        Name:
        </label>
        <input type="text" name="name"  value="' . $item1[0]['name'] . '" />
    </form>';
    

    【讨论】:

    • 你会如何让你的 PHP 适应这个?
    【解决方案2】:

    可读性应始终优先于性能优化。您询问哪个更快的事实表明您实际上并未将任何性能损害追溯到相关代码。您真正要问的是如何使代码更具可读性,这是可以理解的,因为代码旨在供人类阅读并由计算机执行。

    在这些情况下,我的第一个建议是,当您输出大量 HTML 且仅输出一小部分 PHP 代码时,始终退出 PHP 解析器。

    <?php
    /* Put your PHP code here */
    $PHP = "PHP";
    ?>
    <p>This is some html with a little <?php echo $PHP ?> code</p>
    

    通过关闭 PHP tags 来编写大量 HTML 代码,您只需告诉 PHP 停止解析 PHP 代码并将后面的所有内容作为纯文本输出,直到找到另一个 opening PHP tag

    另一种选择是使用heredoc syntax,它不需要所有凌乱的单引号/双引号转义。

    可以直接在字符串语法中进行变量插值,因此可以使用以下方法:

    $string = <<<EOL
    <p>This is some html with a little $PHP code</p>
    EOL;
    

    【讨论】:

    • 所以,换句话说,你连接这么多代码,根本不会影响性能?
    • 显然,您在 PHP 中所做的一切都会对性能产生影响,但是在 PHP 中处理字符串是成本最低的事情。无论您是连接字符串还是在字符串语法中使用字符串插值,如上所示,PHP 的工作量几乎相同。因为在内部,当您将变量放入字符串中时,PHP 会将您的字符串分成几部分。
    【解决方案3】:

    如果你真的需要输出到一个字符串并且想要编写干净的代码,我会使用输出缓冲。

    ob_start()
    ?>
    <html>
    <body>
      <div></div>
    </body>
    </html>
    <?
    $message = ob_get_contents();
    ob_end_clean();
    

    但最好输出实际的 html,然后只回显 PHP 变量,如 &lt;?=$var?&gt; 或事件 &lt;?php echo $var; ?&gt;

    【讨论】:

    • 这对他的问题有什么帮助?
    • 他要求一种将 html 内容转换为字符串而不会造成混乱的方法。就是这样。
    【解决方案4】:

    您不会注意到两者之间的任何区别。这是 99.999% 的网站永远不需要担心的微优化。

    我个人会做这样的事情:

    <div class="label" style="width:200px; float:left; text-align:right;">Organisation:</div>   
    <div class="input" style="margin-left: 210px;"><b> <?php echp $item1[0]['organisation'] ?> </b></div>
    <div class="label" style="width:200px; float:left; text-align:right;">Group:</div> 
    <div class="input" style="margin-left: 210px;"><b><?php echo $item1[0]['group'] ?></b></div>
    <div class="label" style="width:200px; float:left; text-align:right;">Name:</div> 
    

    然后,更进一步,不要使用内联样式。这将大大提高可读性和可编辑性

    【讨论】:

    • 那么,它同样快速和高效吗?非常大的代码 sn-ps 怎么样?
    • 您需要更好地组织代码。将 HTML 和 PHP 分开
    • “早期优化是万恶之源”
    猜你喜欢
    • 2012-02-26
    • 2020-08-08
    • 2020-07-23
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    相关资源
    最近更新 更多