J'ai un appel de fonction save(), cette fonction regroupe toutes les entrées sur la page, et effectue un appel AJAX vers le serveur à sauvegarder l'état de travail de l'utilisateur.
save() est actuellement appelée lorsque l'utilisateur clique sur le bouton enregistrer, ou effectue une autre action, qui exige que nous avons le plus de l'état actuel sur le serveur (générer un document à partir de la page par exemple).
Je m'ajoute à la capacité d'auto-enregistrer le travail de l'utilisateur chaque tellement souvent. Je tiens tout d'abord à empêcher la sauvegarde automatique et généré par les Utilisateurs d'enregistrer de s'exécuter en même temps. Nous avons donc le code suivant (je suis de coupe plus du code et ce n'est pas un rapport de 1:1, mais devrait être suffisant pour se faire une idée de l'échelle):
var isSaving=false;
var timeoutId;
var timeoutInterval=300000;
function save(showMsg)
{
//Don't save if we are already saving.
if (isSaving)
{
return;
}
isSaving=true;
//disables the autoSave timer so if we are saving via some other method
//we won't kick off the timer.
disableAutoSave();
if (showMsg) { //show a saving popup}
params=CollectParams();
PerformCallBack(params,endSave,endSaveError);
}
function endSave()
{
isSaving=false;
//hides popup if it's visible
//Turns auto saving back on so we save x milliseconds after the last save.
enableAutoSave();
}
function endSaveError()
{
alert("Ooops");
endSave();
}
function enableAutoSave()
{
timeoutId=setTimeOut(function(){save(false);},timeoutInterval);
}
function disableAutoSave()
{
cancelTimeOut(timeoutId);
}
Ma question est de savoir si ce code est sûr? Faire les principaux navigateurs ne permettent qu'un seul thread à exécuter à un moment?
Une pensée que j'ai eu est qu'il serait pire pour l'utilisateur de cliquer sur enregistrer et n'obtenez pas de réponse, parce que nous sommes l'enregistrement automatique (Et je sais comment modifier le code pour gérer cette). Quelqu'un voit d'autres questions ici?