获取随机php号码的最快方法?

时间:2010-06-24 05:01:27

标签: php

我试图通过附加'?来阻止缓存? t ='到我的JS文件的末尾。获得这样一个数字的最快方法是什么? time()或rand()还是其他什么?

7 个答案:

答案 0 :(得分:6)

time()和mt_rand()在PHP效率方面非常相似 - 根据您需要的因素选择一个或另一个:

  • 很难猜到:使用mt_rand()(例如,生成使用盐)
  • 获取难以猜测的唯一标识符:use mt_rand(1,931415926536); (例如,生成会话ID)
  • (显然)保留记录:使用time()(例如,防止缓存,记录等)

如果你真的想知道,time()稍微更快 - 但你真的不需要担心它。 (这是一秒或两秒钟之间的差异。)

(mt_rand()大约是rand()的4倍

您可能已经知道这一点,但请务必在进行优化之前始终对代码进行概要分析;通常它会因为与你的预期完全不同的原因而缓慢运行。

答案 1 :(得分:5)

如果你只是阻止缓存,那么time()就足够了。

答案 2 :(得分:3)

称我为老式,但防止缓存是可以而且应该通过使用HTTP标头而不是唯一网址来实现的。如果您通过PHP动态提供文件:

<?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
?>

否则在apache中使用.htaccess文件(或任何其他Web服务器中的类似配置):

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

答案 3 :(得分:2)

尝试:

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

答案 4 :(得分:2)

请勿使用rand(),请使用mt_rand()

  

它使用具有已知特征的随机数生成器,使用Mersenne Twister,这将产生比平均libc rand()提供的快<4>的随机数

答案 5 :(得分:1)

这有点古老,但这是一千万次执行的时间比较

总执行时间测试mt_rand:0.0067805965741475分钟

总执行时间测试rand:0.0068778196970622分钟

总执行时间测试时间:0.0088921149571737分钟

看来mt_rand快一点。

const user = client.users.fetch(UserID)

答案 6 :(得分:-1)

srand(time());
echo '?t=' . rand();