1

我一直是一个编写干净易读的代码的人。话虽如此,我无法确定使用更多或更少<?php标签时处理速度是否有任何差异。下面是一些代码进行比较:

首选代码:

<?php while($condition): ?>
    <?php if($anotherCondition): ?>
        Hello world!
    <?php endif; ?>
<?php endwhile; ?>

更短的代码:

<?php while($condition):
    if($anotherCondition): ?>
        Hello world!
    <?php endif;
endwhile; ?>

您在第二个代码中看到我只使用了两个<?php标签,但我发现第一个代码块更容易理解。是否因为我使用了更多<?php标签而降低了效率?


一旦初始化,JQM 将改变 DOM,使许多默认的 ko 绑定变得无用。可以编写自定义绑定来解决这些问题。很难说这里的实际问题是什么,但这应该给你一些阅读的东西。

这是一篇有用的文章:http ://www.scottlogic.co.uk/blog/colin/2012/10/integrating-knockout-and-jquerymobile/

4

4 回答 4

3

No syntax issue can affect performance, so write readable code :)

Your second example is readable too, there is no reason to use 4 instead of 2 php blocks

于 2013-01-24T23:59:59.687 回答
3

我测试了您的 2 种代码 + 1 个无空格版本,通过引入$time_start = microtime(true);代码之前和代码echo $time = microtime(true) - $time_start;之后来检查处理速度。

由于处理时间接近微秒,因此结果可能会因许多微小因素而异。所以我测试了每个代码 10 次,我做了一个平均时间。

带有打印文本的测试

首选代码

<?php $time_start = microtime(true); ?>

<?php $i = 0; ?>
<?php while($i <= 5000): ?>
<?php echo $i; ?>
<?php $i++; ?>
    <?php if($i == 5000): ?>
        This is the end! 
    <?php endif; ?>
<?php endwhile; ?>

<?php echo $time = microtime(true) - $time_start; ?>

平均时间:0.00366528034210207 秒

更短的代码

<?php

    $time_start = microtime(true);

    $i = 0;
    while($i <= 5000):
        echo $i." ";
        $i++;
        if($i == 5000):
            echo "This is the end!";
        endif;
    endwhile;

    echo $time = microtime(true) - $time_start;

?>

平均时间:0.00243649482727052 秒

无空格代码

<?php $time_start=microtime(true);$i=0;while($i<=5000):echo $i." ";$i++;if($i==5000):echo "This is the end!";endif;endwhile;echo$time=microtime(true)-$time_start;?>

平均时间:0.00242624282836913 秒

不打印文本的测试

首选代码

<?php $time_start = microtime(true); ?>

<?php $i = 0; ?>
<?php while($i <= 5000): ?>
    <?php $i++; ?>
    <?php if($i == 5000): ?>
        <?php $a=$i; ?>
    <?php endif; ?>
<?php endwhile; ?>

<?php echo $time = microtime(true) - $time_start; ?>

平均时间:0.00143785476684571 秒

更短的代码

<?php

    $time_start = microtime(true);

    $i = 0;
    while($i <= 5000):
        $i++;
        if($i == 5000):
            $a=$i;
        endif;
    endwhile;

    echo $time = microtime(true) - $time_start;

?>

平均时间:0.000472831726074218 秒

无空格代码

<?php $time_start=microtime(true);$i=0;while($i<=5000):;$i++;if($i==5000):$a=$i;endif;endwhile;echo$time=microtime(true)-$time_start;?>

平均时间:0.000457286834716797 秒

结论/总结

带打印文本
首选代码:0.00366528034210207 秒
更短代码:0.00243649482727052 秒(比以前快 33.5%)
无空格代码:0.00242624282836913 秒(比以前快 0.4%)

不打印文本
首选代码:0.00143785476684571 秒
更短代码:0.000472831726074218 秒(比以前快 66.1%)
无空格代码:0.000457286834716797 秒(比以前快 3.3%)

10 倍的平均值并不真正正确。它应该通过删除极端结果来完成 100 或 1000 次以获得很好的表示。但是通过这个简单的例子,我们可以看到前两个代码之间的显着差异,第三个代码是微不足道的。

于 2013-01-25T02:13:42.840 回答
3

存在性能影响,但可能可以忽略不计。任何不在<?php ?>块内的空格或制表符都将作为 PHP 脚本输出的一部分发送。要理解这一点,请考虑以下简单示例:

PHP代码:

<?php while($condition): ?>
    <?php if($anotherCondition): ?>
        Hello world!
    <?php endif; ?>
<?php endwhile; ?>

通过网络发送为

\n
\t\n
\t\tHello world!\n
\t\n
\n

虽然这个 PHP:

<?php while($condition):
    if($anotherCondition): ?>
        Hello world!
    <?php endif;
endwhile; ?>

返回这个:

\n
\t\tHello world!\n
\n

不过,这不是您真正要担心的事情,我说要使用可读的代码。但是,我会说您的第一个示例涉及大量额外的输入,您确定它更好吗?

于 2013-01-25T00:05:10.243 回答
2

也许由于您缺少缩进​​而无法阅读?我就是这样做的。

<?php
  while($condition): //should be a colon not a semicolon
    if($anotherCondition): //should be a colon not a semicolon
?>
      Hello world!
<?php 
    endif;
  endwhile; 
?>
于 2013-01-25T00:03:47.947 回答