J'ai une fonction appelée save(), cette fonction rassemble toutes les entrées sur la page, et effectue un appel AJAX au serveur pour sauvegarder l'état du travail de l'utilisateur. Save() est actuellement appelé quand un utilisateur clique sur le bouton de sauvegarde, ou effectue une autre action qui nous oblige à avoir l'état le plus courant sur le serveur (générer un document à partir de la page par exemple).Fil Sécurité en Javascript?
J'ajoute à la capacité d'enregistrer automatiquement le travail de l'utilisateur de temps en temps. Tout d'abord, je voudrais empêcher une sauvegarde automatique et une sauvegarde générée par l'utilisateur de s'exécuter en même temps. Nous avons donc le code (je coupe le plus du code et ce n'est pas 1: 1, mais devrait être suffisant pour faire passer l'idée): après
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? Est-ce que les principaux navigateurs n'autorisent qu'un seul thread à s'exécuter à la fois? Une pensée que j'ai eu, c'est qu'il serait pire pour l'utilisateur de cliquer sur Enregistrer et d'obtenir aucune réponse, car nous sommes en mode automatique (et je sais comment modifier le code pour gérer cela). Quelqu'un voit-il d'autres problèmes ici?
basé sur De sorte que si l'utilisateur clique enregistrer la minuterie ne se déclenche pas jusqu'à ce que la fonction de sauvegarde est terminée? – JoshBerke
Si je vous comprends bien, vous demandez si l'utilisateur a lancé une sauvegarde, le setTimeout initié enregistrer jamais entrer la même méthode. La réponse est non, ils ne seront pas dans la méthode save() en même temps, jamais. –
Que faisons-nous puisque cette information est légèrement dépassée? JavaScript a maintenant plusieurs threads: https://developer.mozilla.org/En/Using_web_workers – jmort253