Heim > Artikel > Backend-Entwicklung > Wann immer möglich native PHP-Funktionen verwenden?
Eine solche Funktion habe ich heute entdeckt, als ich die Arr-Klasse im Kohana-Quellcode gelesen habe
/** * 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性能优化的说法——PHP为我们提供了那么多的原声函数,我们尽量用原生函数解决问题。于是我就做了个测试,看看php原生函数性能究竟比自己写的快多少。要测试的函数有原生函数range()和上面的函数_range(),这里加下划线开始是因为重写原声函数range()会报错“Fatal error: Cannot redeclare range() in”。
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";
Getestet mit nativen bzw. benutzerdefinierten Funktionen. Bei der Generierung aller Vielfachen von 3 zwischen 0 und 1.000.000 übertrafen die Ergebnisse meine Erwartungen:
Das erste ist das Ergebnis der Verwendung nativer Funktionen:
Das Folgende ist das Ergebnis der Verwendung einer benutzerdefinierten Funktion:
Um die Ergebnisse genauer zu machen, erstelle ich ein statistisches Diagramm
统计次数 | 原生函数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 |
Aus der Tabelle geht hervor, dass benutzerdefinierte Funktionen beim Generieren von Zufallszahlen Speicher und Zeit sparen. Darüber hinaus verbrauchen native Funktionen viel Speicher und Zeit, wenn sie eine große Anzahl von Zufallszahlen generieren. Andererseits ist die Leistung des generierten Speichers und die verbrauchte Zeit grundsätzlich stabil. Es scheint, dass das, was der vorherige Senior gesagt hat, möglicherweise nicht ganz korrekt ist, aber es sollte hier beachtet werden, dass unsere benutzerdefinierte Funktion hier nur Zahlen generieren kann. Während der native Bereich immer noch über die Möglichkeit verfügt, Buchstaben zu generieren, denke ich, dass es nicht allzu schwierig sein sollte, mit dieser benutzerdefinierten Funktion Buchstaben hinzuzufügen~
Es scheint, dass Kohana-Beamte ein gutes Verständnis für die Bereichsfunktion und die Komplexität dieser Funktion im PHP-Kernel haben. Deshalb kann diese kleine Optimierung so gut funktionieren. ! !
Schick mir~
Das Obige stellt vor, wie man die nativen PHP-Funktionen so weit wie möglich nutzt. Ich hoffe, dass es Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird, einschließlich relevanter Inhalte.