Les requêtes AJAX ne s'exécutent pas simultanément
Dans le but d'optimiser les performances, deux requêtes AJAX simultanées sont utilisées dans une application Web pour suivre la progression d'une tâche de longue haleine. Cependant, la deuxième requête reste bloquée jusqu'à ce que la première soit terminée.
Cause première : blocage de session
PHP, par défaut, utilise une approche basée sur les fichiers pour le stockage de session. Lorsqu'une session est initiée avec session_start(), elle acquiert un verrou en écriture exclusif sur le fichier de session. Par conséquent, toutes les autres requêtes tentant d'accéder au fichier de session seront bloquées jusqu'à ce que le verrou soit libéré.
Solution : désactiver les sessions basées sur des fichiers
Une solution consiste à désactiver stockage de session basé sur des fichiers en modifiant le fichier de configuration php.ini :
session.save_handler = redis session.save_path = tcp://localhost:6379
Cette modification redirige les données de session vers un serveur Redis, éliminant ainsi le problème de verrouillage des fichiers.
Alternative : Fermer l'écriture du fichier de session
Vous pouvez également libérer le verrou en écriture du fichier de session en fermant explicitement le fichier de session après avoir écrit les données :
<?php session_start(); $_SESSION['foo'] = 'bar'; // Write data to the session session_write_close(); // Release the file write lock
Cette technique permet aux données de session d'être lire plus tard, mais empêche que d'autres requêtes soient bloquées par le verrou en écriture de session.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!