2009年7月14日 星期二

php 三種擷取方式的速度比較.

由於程序需要,於是對PHP採集中的字符提取的核心部分進行了執行速度的測試。

  測試了三種最常見的提取辦法:

  方法一:


  <?php
  require "class.debug.php";
  function getContent ( $sourceStr )
  {
  $content = strstr( $sourceStr, '形' );
  $content = substr( $content, 0, strrpos( $content, '言' ) + strlen( '言' ) );
  return $content;
  }
  $sourceStr = '拒絕任何人以任何形式在本論壇發表與法律相牴觸的言論';
  $debug = new Debug;
  $debug->startTimer();
  for( $i = 0; $i < 1000000; $i++ )
  {
  $returnStr = getContent( $sourceStr );
  }
  $timeInfo = $debug->endTimer();
  echo $timeInfo;
  ?>


  通過比較低級的字符操作函數進行提取.

  方法二:


  <?php
  require "class.debug.php";
  function getContent ( $sourceStr )
  {
  $pattern = "/形(.*?)言/is";
  preg_match_all( $pattern, $sourceStr, $result );
  return $result[1][0];
  }
  $sourceStr = '拒絕任何人以任何形式在本論壇發表與法律相牴觸的言論';
  $debug = new Debug;
  $debug->startTimer();
  for( $i = 0; $i < 1000000; $i++ )
  {
  $returnStr = getContent( $sourceStr );
  }
  $timeInfo = $debug->endTimer();
  echo $timeInfo;
  ?>


  使用一個簡單的正則來提取.

  方法三:

 
 <?php
  require "class.debug.php";
  function getContent ( $sourceStr )
  {
  $content = explode( '形', $sourceStr );
  $content = explode( '言', $content[1] );
  return $content[0];
  }
  $sourceStr = '拒絕任何人以任何形式在本論壇發表與法律相牴觸的言論';
  $debug = new Debug;
  $debug->startTimer();
  for( $i = 0; $i < 1000000; $i++ )
  {
  $returnStr = getContent( $sourceStr );
  }
  $timeInfo = $debug->endTimer();
  echo $timeInfo;
  ?>

答案是 1 > 3 > 2
(1)11.69471
(2)21.19316
(3)11.72613

參考來源

【下列文章您可能也有興趣】

沒有留言: