的index.php:
<div class="start">START</div>
<div class="content"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="script.js"></script>
update1.php:
<div class="fire">FIRE<div>
<div class="result"></div>
update2.php:
$json = array(
'unique' => uniqid(),
);
echo json_encode($json);
的script.js:
$(document).off("click", ".start").on("click", ".start", function (event) {
$.ajax({
url: "update1.php",
data: {},
type: "POST",
success: function (data) {
$(".content").html(data);
}
})
});
$(document).off("click", ".fire").on("click", ".fire", function (event) {
$.ajax({
url: "update2.php",
type: "POST",
dataType: "json",
encode: true,
data: {},
success: function (data) {
$(".result").html(data.unique);
}
});
});
我通过Ajax加载一些数据,然后用json编码加载一个唯一ID。它运作良好。唯一的问题是,每次点击都会出现问题&#34; FIRE&#34;加载唯一ID的速度越来越慢。
加载时间或多或少像这样
...
我无法找到,为什么会这样。
答案 0 :(得分:1)
问题在于uniqid()
为了避免基于时间的冲突,它将睡眠一定数量的mircoseconds。
这可以在不失去基于时间的碰撞实例中发生的唯一性的情况下得到缓解。
请参阅此处的详细说明:Why is uniqid slow?
解决方案的关键部分是将more_entropy
设置为true以避免基于时间的冲突。
通过将more_entropy设置为true,我们选择通过使用php_combined_lcg()(伪随机数生成器)附加数据来提供额外的熵源,从而防止时间引起的冲突而不必睡觉。