4 Stimmen

Wie bekomme ich am schnellsten eine zufällige php-Nummer?

Ich versuche, die Zwischenspeicherung zu verhindern, indem ich ein '? t=' an das Ende meiner JS-Dateien anhänge. Was ist der schnellste Weg, eine solche Zahl zu erhalten? time() oder rand() oder etwas anderes?

0 Stimmen

Am schnellsten bedeutet am wenigsten ressourcenintensiv.

8 Stimmen

Warum sind Sie so besorgt über die Geschwindigkeit bei dieser speziellen Operation? Haben Sie ein Profil erstellt? Wie viel Zeit erwarten Sie zu sparen, wenn Sie das eine dem anderen vorziehen? ...erlauben Sie mir, etwas direkter zu sein: Es macht keinen bedeutenden Unterschied. Wir reden hier von einem Unterschied, der in Nanosekunden gemessen wird.

2 Stimmen

@Frank Farmer: Es macht immer noch Spaß, darüber zu reden :)

6voto

Aaron Yodaiken Punkte 18362

Time() und mt_rand() sind sich in Bezug auf ihre Effizienz in PHP ziemlich ähnlich - je nachdem, wofür Sie sie brauchen, wählen Sie die eine oder andere Methode:

  • Nur schwer zu erraten: mt_rand() verwenden (z. B. beim Erzeugen von Salt)
  • Eine eindeutige Kennung erhalten, die schwer zu erraten ist: mt_rand(1, 931415926536); (z. B. Erzeugung einer Sitzungs-ID)
  • (natürlich) Aufzeichnungen machen: time() verwenden (z. B. Zwischenspeicherung, Protokolle usw. verhindern)

Wenn Sie es wirklich wissen wollen, ist time() leicht schneller, aber Sie brauchen sich wirklich keine Sorgen zu machen. (Es ist der Unterschied zwischen einem oder zwei kleinen Teilen einer Sekunde.)

(mt_rand() ist etwa 4-mal so schnell wie rand())

Sie wissen das wahrscheinlich schon, aber stellen Sie sicher, dass Sie immer ein Profil Ihres Codes erstellen, bevor Sie Optimierungen vornehmen; oft läuft er aus ganz anderen Gründen langsam als erwartet.

6voto

Sean Patrick Floyd Punkte 283617

Nennen Sie mich altmodisch, aber das Verhindern des Zwischenspeicherns ist etwas, das durch die Verwendung von HTTP-Headern und nicht von eindeutigen URLs erreicht werden kann und sollte. Wenn Sie die Datei dynamisch über PHP bereitstellen:

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>

Andernfalls verwenden Sie eine .htaccess-Datei im Apache (oder eine ähnliche Konfiguration in jedem anderen Webserver):

<FilesMatch "\.js$">
Header set Cache-Control "no-cache, must-revalidate"
Header set Expires "Sat, 26 Jul 1997 05:00:00 GMT"
</FilesMatch>

5voto

Ivar Bonsaksen Punkte 4660

Wenn Sie nur die Zwischenspeicherung verhindern wollen, wäre time() ausreichend.

3voto

nickf Punkte 517253

Verwenden Sie nicht rand() verwenden mt_rand() .

Er verwendet einen Zufallszahlengenerator mit bekannten Eigenschaften unter Verwendung der Mersenne-Twister die Zufallszahlen erzeugen wird viermal schneller als das, was die durchschnittliche libc rand() bietet.

2voto

Sarfraz Punkte 366217

Essayez :

'?t=' . mt_rand(time());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X