Tak więc napisałem skrypt, w którym można wprowadzić liczbę, a program znajdzie najwyższą liczbę pierwszą w tym zakresie. Problem polega na tym, że w PHP obliczenia te są bardzo powolne przy większych liczbach, w porównaniu do mojej wersji JavaScript, która jest dokładnie taka sama, ale znacznie szybsza.Obliczenia matematyczne PHP naprawdę powolne
//Here Is the PHP code:
<form>
<input type="text" name="input">
</form>
<?php
$input = $_GET['input'];
function Prime($num)
{
if($num < 2)
return false;
for ($i = 2; $i < $num; $i++)
{
if($num % $i == 0)
return false;
}
return true;
}
for($i = $input; $i > 0; $i--)
{
if(Prime($i))
echo $i;
if(Prime($i))
exit();
}
}
Oto wariant JavaScript:
<html>
<script>
var input = prompt("Enter The Number");
function Prime(num) {
for (var i = 2; i < num; i++) {
if(num % i == 0) {
return false;
}
}
return true;
}
for(var i = input; i > 0; i--){
if(Prime(i)){
document.write(i);
}
if(Prime(i)){
exit();
p.thisbreaksthecode();
}
}
</script>
</html>
Dla kodu JavaScript, znalezienie najwyższy w prime 99999999 trwa 1,5 sekundy. Jednak w PHP zajmuje to aż 20 sekund. Biorąc pod uwagę fakt, że oprócz składni, oba kody są dokładnie identyczne. To mówi mi, że coś jest nie tak. Jaki może być powód tej powolnej prędkości obliczeniowej? Czy to ze względu na sposób działania PHP? Jak mogę to naprawić?
Pierwsze pytanie: Dlaczego dwa razy obliczasz zalewkę? Drugie pytanie: Czy czytasz o "profilowaniu"? – Sven
Porównujesz różne środowiska wykonawcze i programowanie serwera/klienta. Wydaje mi się, że jakaś kompilacja w samą porę wystartuje, gdy twój silnik javascript zostanie uruchomiony. – collapsar
Wykonuje mniej niż 2 sekundy, aby wykonać na 3v4l.org, jeśli nie obliczysz dwukrotnie liczby pierwszej; i to bez optymalizacji kodu w żaden sposób - http://3v4l.org/hdXNM/perf#tabs –