índice.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>actualizar1.php:
<div class="fire">FIRE<div> <div class="result"></div>actualizar2.php:
$json = array( 'unique' => uniqid(), ); echo json_encode($json);secuencia de comandos.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); } }); });Cargo algunos datos a través de Ajax y luego cargo una ID única con codificación json. Está funcionando bien. El único problema es que con cada clic en "DISPARAR", la carga de la ID única se vuelve cada vez más lenta.
El tiempo de carga es más o menos así
...
No puedo averiguar por qué sucede esto.
El problema es con la implementación PHP de uniqid()
Para evitar colisiones basadas en el tiempo, dormirá durante un número determinado de microsegundos.
Esto se puede mitigar sin perder la singularidad que ocurriría en instancias de colisión basada en el tiempo.
Vea la explicación detallada aquí: ¿Por qué uniqid es lento?
La parte clave de la solución es establecer more_entropy en verdadero para evitar colisiones basadas en el tiempo.
Al establecer more_entropy en verdadero, elegimos proporcionar una fuente adicional de entropía agregando datos usando php_combined_lcg() (un generador de números pseudoaleatorios), evitando así colisiones inducidas por el tiempo sin tener que dormir.