Also habe ich ein Skript geschrieben, wo man eine Nummer eingeben kann und das Programm findet die höchste Primzahl in diesem Bereich. Das Problem ist, dass diese Berechnung in PHP mit großen Zahlen sehr langsam ist, verglichen mit meiner JavaScript-Version, die genau das gleiche ist, aber viel schneller.
%Vor%Hier ist die JavaScript-Variante:
%Vor%Für den JavaScript-Code benötigt das Finden der höchsten Primzahl in 99999999 1,5 Sekunden. In PHP dauert es jedoch ganze 20 Sekunden. Angesichts der Tatsache, dass die beiden Codes abgesehen von der Syntax genau identisch sind. Das sagt mir, dass etwas nicht stimmt. Was könnte der Grund für diese langsame Berechnungsgeschwindigkeit sein? Liegt es an der Funktionsweise von PHP? Wie kann ich es beheben?
Was könnte der Grund für diese langsame Berechnungsgeschwindigkeit sein? Liegt es an der Funktionsweise von PHP?
Wahrscheinlich; PHP macht (derzeit) keine JIT-Optimierungen, daher ist es sehr schmerzhaft, solche engen Schleifen auszuführen.
Wie kann ich es beheben?
Indem Sie einen besseren Algorithmus auswählen:
%Vor%Für Ihre aktuelle Eingabe läuft es 500x schneller.
Sie tun eindeutig etwas falsch in der Art, wie Sie es ausführen.
Ich habe es ausgeführt (php -f calc.php) und es hat sehr wenig gebraucht:
%Vor%dauert weniger als eine Sekunde zur Ausführung: 0.94304203987122
Wenn Sie nun $i++
in ++$i
ändern, geht das auf:
0.67830395698547
(Pre-Increment ist schneller als Post-Increment in PHP)