繁体   English   中英

PHP将数据回显到HTML性能

[英]php echo data to html performance

我以表格形式向我的网站添加了一些数据。 实际上,一切正常,但是我想测试一些大数据的性能。 非常糟糕。 这是我的结果:

tablesize | time
-----------------
10x20     | 0.22s
100x20    | 3.29s
1000x20   | 28.75s

我的问题是哪种方法更好地显示结果以及原因:

1:

<?php
   for($i=0; $i<count($array); $i++){
       echo "<div id='...' class='...Ä style='...'>"
       for($i=0; $i<count($array); $i++){
           echo "<div style='...'>".array[$i][$j]."</div>";
       }
       echo "</div>";
   }
?>

2:

<?php
   for($i=0; $i<count($array); $i++){
?>
       <div id='...' class='...Ä style='...'>
<?php  
       for($i=0; $i<count($array); $i++){
?>
           <div style='...'> <?php echo array[$i][$j]; ?> </div>
       <?php } ?>
       </div>
<?php   } ?>

也许有人提供了一些其他技巧,使我可以快速实现数据可视化。 我读了一些有关MySQL结构的文章,我相信我的数据库看起来不错。 因此,我可以做些什么来优化数据读取。

正如scaisEdge所说,对数据进行分页。 此外,有一些更改可以使您的代码更快。

  1. for循环外的count($ foo)
  2. 使用预增量而不是后增量
  3. 使用“ str”和串联而不是“ str”

这是一个“基准”(无输出):

<?php
$array = array();
for($i = 0; $i < 1000; ++$i){
    $array[] = range(0, 20, 1);
}

$t = microtime(true);
for($k = 0; $k < 5000; ++$k){
   for($i=0; $i<count($array); $i++){
       $a = "<div id='...' class='...Ä style='...'>";
       for($j=0; $j<count($array[$i]); $j++){
           $a = "<div style='...'>".$array[$i][$j]."</div>";
       }
       $a = "</div>";
   }
}
echo 'Count and post : ' . (microtime(true) - $t) . "\n";


$t = microtime(true);
for($k = 0; $k < 5000; ++$k){
   $c = count($array);
   for($i=0; $i<$c; $i++){
       $a = "<div id='...' class='...Ä style='...'>";
       $c2 = count($array[$i]);
       for($j=0; $j<$c2; $j++){
           $a = "<div style='...'>".$array[$i][$j]."</div>";
       }
       $a = "</div>";
   }
}
echo 'No count and post : ' . (microtime(true) - $t) . "\n";


$t = microtime(true);
for($k = 0; $k < 5000; ++$k){
   $c = count($array);
   for($i=0; $i<$c; ++$i){
       $a = "<div id='...' class='...Ä style='...'>";
       $c2 = count($array[$i]);
       for($j=0; $j<$c2; ++$j){
           $a = "<div style='...'>".$array[$i][$j]."</div>";
       }
       $a = "</div>";
   }
}
echo 'No count and pre : ' . (microtime(true) - $t) . "\n";


$t = microtime(true);
for($k = 0; $k < 5000; ++$k){
   $c = count($array);
   for($i=0; $i<$c; ++$i){
       $a = '<div id="..." class="...Ä style="...">';
       $c2 = count($array[$i]);
       for($j=0; $j<$c2; ++$j){
           $a = '<div style="...">'.$array[$i][$j].'</div>';
       }
       $a = '</div>';
   }
}
echo 'No count and pre and \' : ' . (microtime(true) - $t) . "\n";

// @scaisEdge
$t = microtime(true);
for($k = 0; $k < 5000; ++$k){
   foreach($array as $subarray){
       $a = '<div id="..." class="...Ä style="...">';
       foreach($subarray as $v){
           $a = '<div style="...">'.$v.'</div>';
       }
       $a = '</div>';
   }
}
echo 'Foreach : ' . (microtime(true) - $t) . "\n";

?>

输出:

Count and post : 46.050459861755
No count and post : 30.590306043625
No count and pre : 29.880299091339
No count and pre and ' : 29.930299043655
Foreach : 29.120290994644

看起来很奇怪,'似乎比“。慢。PHP会在其中检查”字符串变量并将其替换,而'string只是... string。 没有执行任何操作。

有人对这种缓慢有想法吗?

对于大的输出,应该使用分页...输出1000行似乎没有用。如果分页,则结果与最后一次的输出相等。

但是您可以为代码做一些事情..您应该只计算一次结果,而不是整个循环的周期,所以请代替for($i=0; i<count($array); $i++){

你应该使用

$numElem =count($array);
for($i=0; $i<$numElem; $i++){
     .......
}

或使用

 foreach ( $array as $key => $value ){
  ......
 }

这些更快

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM