PHPネイティブ関数を使ってみる

WBOY
リリース: 2016-06-13 12:11:04
オリジナル
954 人が閲覧しました

可能な限り PHP ネイティブ関数を使用しますか?

今日kohanaのソースコードのArrクラスを読んでいたらこんな関数を見つけました

	/**	 * Fill an array with a range of numbers.	 *	 *     // Fill an array with values 5, 10, 15, 20	 *     $values = Arr::range(5, 20);	 *	 * @param   integer $step   stepping	 * @param   integer $max    ending number	 * @return  array	 */	public static function range($step = 10, $max = 100)	{		if ($step < 1)			return array();		$array = array();		for ($i = $step; $i <= $max; $i += $step)		{			$array[$i] = $i;		}		return $array;	}
ログイン後にコピー
 
ログイン後にコピー
    看到这里的时候,我发现php的原声函数也是可以实现这个功能的,忽然想到之前听到过的一个前辈关于php性能优化的说法&mdash;&mdash;PHP为我们提供了那么多的原声函数,我们尽量用原生函数解决问题。于是我就做了个测试,看看php原生函数性能究竟比自己写的快多少。要测试的函数有原生函数range()和上面的函数_range(),这里加下划线开始是因为重写原声函数range()会报错&ldquo;Fatal error: Cannot redeclare range() in&rdquo;。
ログイン後にコピー
        function _range($step = 10, $max = 100)	{		if ($step < 1)			return array();		$array = array();		for ($i = $step; $i <= $max; $i += $step)		{			$array[$i] = $i;		}		return $array;	}	$time['begin'] = microtime(true);	$tmp = range(0,1000000,3);	//$tmp = _range(0,1000000,3);	$time['end']   = microtime(true);	echo $time['end'] - $time['begin'].'s'."\r";	echo (memory_get_peak_usage()/1024/1024)."M";
ログイン後にコピー

ネイティブ関数とカスタム関数でテストしましたそれぞれ、0 から 1000000 までの 3 の倍数をすべて生成すると、結果は私の予想を超えます:

最初はネイティブ関数を使用した結果です:

PHPネイティブ関数を使ってみる

カスタム関数を使用した結果は次のとおりです。

PHPネイティブ関数を使ってみる

結果をより正確にするために、チャート統計を作成しています

统计次数 原生函数range() 自定义函数_range()
(0,1000000,3) 5.155E-3s 27.5530M 1.907E-5s 0.1241M
(0,1000000,2) 7.479E-3s 40.2688M 1.811E-5s 0.1241M
(0,1000,1) 8.16E-5s 0.1620M 2.649E-5s 0.1241M

表から、乱数を生成する場合、カスタム関数はネイティブ関数よりもメモリと時間を節約することがわかります。さらに、ネイティブ関数は生成時に多くのメモリと時間を消費します。大量の乱数を生成する場合、自己定義関数は多くのメモリと時間を消費しますが、この点では定義された関数は良好なパフォーマンスを示し、生成されるメモリと消費時間は基本的に安定しているようです。前の先輩が言ったことは完全に正しいわけではないかもしれませんが、ここでのカスタム関数は数値のみを生成でき、ネイティブ範囲では文字も生成できることに注意してください。しかし、文字を追加するのはそれほど難しくないと思いますこのカスタム関数~

kohana の関係者は range 関数をよく知っているようで、PHP カーネルのこの関数も知っています。私も複雑さについてはよく知っているので、この小さな最適化は非常にうまく行うことができます。すごいです! ! !

送ってください~

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート