Ich habe ein PHP-basiertes System funktioniert seit 2006 perfekt, die einen Back-End (CLI, Cron) -Prozess hat, verarbeitet Millionen von Datensätzen, mit einer großen baumartigen Struktur im Speicher.Warum PHP-Array mit neueren PHP-Versionen langsamer wird, und wie man das umgehen kann?
Ich habe große Leistungsregressionen beim Upgrade einer Debian-Maschine bemerkt.
Also, um das Problem zu erforschen, schrieb ich ein einfaches Skript, und heruntergeladen ein Dutzend Xampp Releases, und führen Sie das gleiche Skript mit den verschiedenen PHP-Versionen.
$start=microtime(true);
$n=10;
$counter=1;
$testarray=Array();
for ($i[1]=0;$i[1]<$n;$i[1]++)
for ($i[2]=0;$i[2]<$n;$i[2]++)
for ($i[3]=0;$i[3]<$n;$i[3]++)
for ($i[4]=0;$i[4]<$n;$i[4]++)
for ($i[5]=0;$i[5]<$n;$i[5]++)
for ($i[6]=0;$i[6]<$n;$i[6]++)
for ($i[7]=0;$i[7]<$n;$i[7]++)
$testarray[$i[1]][$i[2]][$i[3]][$i[4]][$i[5]][$i[6]][$i[7]]=$counter++;
$end=microtime(true);
echo "PHP ".phpversion()." ".round(memory_get_peak_usage(true)/(1024*1024),2)." mbyte max ram, ".round($end-$start,2)." seconds\r\n";
Ich betreibe das gleiche Skript gegen XAMPP win32 1.6.0a durch win32 1.7.7-VC9, mit den folgenden Ergebnissen:
- PHP 5.2.1 890.25 mbyte max ram, 12.43 seconds
- PHP 5.2.1 890.25 mbyte max ram, 12.37 seconds
- PHP 5.2.2 890.25 mbyte max ram, 12.43 seconds
- PHP 5.2.3 890.25 mbyte max ram, 12.38 seconds
- PHP 5.2.4 890.25 mbyte max ram, 12.5 seconds
- PHP 5.2.5 890.25 mbyte max ram, 12.28 seconds
- PHP 5.2.5 890.25 mbyte max ram, 12.31 seconds
- PHP 5.2.6 890.25 mbyte max ram, 12.52 seconds
- PHP 5.2.6 890.25 mbyte max ram, 12.54 seconds
- PHP 5.2.8 890.25 mbyte max ram, 12.72 seconds
- PHP 5.2.9 890.25 mbyte max ram, 12.53 seconds
- PHP 5.3.0 975.5 mbyte max ram, 18.28 seconds
- PHP 5.3.1 975.5 mbyte max ram, 18.06 seconds
- PHP 5.3.5 975.5 mbyte max ram, 18.49 seconds
- PHP 5.3.8 975.5 mbyte max ram, 17.97 seconds
- PHP 5.3.8 975.5 mbyte max ram, 18.11 seconds
Hinweise: - Ich benutze keine xampp oder Fenster auf Servern, aber dies war der einfachste Weg, um durch verschiedene Versionen gleichzeitig zu testen. - Ich habe versucht, für dieses Problem ein paar Mal googeln, aber keine relevanten Ergebnisse - Der Geschwindigkeitsverlust ist in etwa die gleiche (50% längere Laufzeit) auf den Servern - Ich glaube nicht, dass eine Verlangsamung von diese Art ist von jedem Framework oder Compiler akzeptabel, - trotz neuer Features sollten die alten genauso gut funktionieren wie vorher. Ich kann meinem Chef nicht sagen, dass derselbe Computer mit der gleichen Software nicht mehr den gleichen Job machen kann, weil wir den Debian darauf aufdatiert haben ... Das würde aussehen wie ein Windows-Upgrade. :)
Irgendwelche Ideen?
Wow einfach alle, die PHP-Versionen Sie viel Zeit ich glaube ausgegeben zu installieren. Sie könnten nur 2-3 Releases testen – dynamic
Extrem hässliche Schleife beiseite, ich bin mir nicht ganz sicher, warum anders als vielleicht eine (oder mehrere) der PHP-Erweiterungen, die mit XAMMP installiert werden, die Leistung wie verrückt aufbläht. Yikes, mit dem größten Teil meines Codes habe ich gesehen, wie sich die Dinge beschleunigen. Der erste Gedanke, der Ihnen in den Sinn kommt, wäre, dass die neuere Version vielleicht besser mit der Objektorientierung funktioniert. – pthurmond
Wie zur Hölle hast du all diese Releases installiert? – Mustafa