2009-12-16 10 views
9

Je veux référencer du code Javascript dans le navigateur, mais cela peut déclencher le popup "Warning: Unresponsive script" de Firefox. Cela permet à l'utilisateur de cliquer sur "Stop script" dans le cas où le navigateur est pris dans une fonction d'emballement. Lorsque la fenêtre contextuelle est affichée, la fonction en cours d'exécution a été arrêtée. Ce n'est pas idéal, alors existe-t-il un moyen d'exécuter différemment mes benchmarks de sorte que Firefox ne fasse pas apparaître cet avertissement et ne gâche pas mes résultats?Comment éviter la popup popup Unresponsive Script dans Firefox avec Javascript à long terme?

Répondre

11

Dans l'adresse de Firefox type barre about: config

Vous voulez changer dom.max_script_run_time être assez grand pour vos scripts pour exécuter.

+7

Est-il censé faire cela pour chaque utilisateur de la page? – Oded

+7

Il l'utilise pour l'analyse comparative - je ne pense pas qu'il y ait d'autres utilisateurs. – Annie

9

Vous devez diviser les actions longues en plus petites et les exécuter dans les virages. Cela permettra également une meilleure indication de progression.

http://www.sonofsofaman.com/hobbies/code/settimeout.asp

+2

Pouvez-vous élaborer? Un exemple simple, peut-être? – spoulson

+0

Voici un exemple d'utilisation de setTimeout pour interrompre l'exécution du javascript: http://www.sonofsofaman.com/hobbies/code/settimeout.asp Si vous faites des benchmarks, assurez-vous que vous autorisez le code à courir assez longtemps pour compenser la résolution de la minuterie. Vous aurez probablement envie de lire ceci: http://ejohn.org/blog/accuracy-of-javascript-time/ – Annie

+0

Ce lien semble être cassé. Pourriez-vous élaborer sur la façon de le faire dans votre réponse? – Chris

0

Le code ci-dessous résolu ce problème pour moi. ..

<script type="text/javascript"> 
    function downloadJSAtOnload() { 
    var element = document.createElement("script"); 
    element.src = "deferredfunctions.js"; 
    document.body.appendChild(element); 
    } 
    if (window.addEventListener) 
    window.addEventListener("load", downloadJSAtOnload, false); 
    else if (window.attachEvent) 
    window.attachEvent("onload", downloadJSAtOnload); 
    else window.onload = downloadJSAtOnload; 
</script>