8
votes

Comment puis-je tester potentiellement "navigateur-crash" JavaScript?

J'ai eu une fissure à certains des problèmes sur http://projecteuler.net/ avec JavaScript. J'utilise une simple page HTML et exécutant mon code dans les balises de script afin que je puisse enregistrer mes résultats dans la console des navigateurs. Lors de l'expérimentation avec des boucles, je provoque parfois un crash du navigateur.

Y a-t-il un meilleur environnement pour moi de faire ce genre de développement?


2 commentaires

Vous voulez un "crash mon navigateur magique sans écraser mon navigateur" test? A quel point ce serait cool? Si seulement tout le monde ait eu un tel test, alors peut-être que les navigateurs n'arriveraient pas.


Pensez que votre première étape pourrait être de ne pas écrire des boucles infinies!


6 Réponses :


5
votes
  1. un navigateur contenant des processus séparés pour chaque onglet
  2. Points d'arrêt de débogueur
  3. Un si cela casse la boucle si un seuil de temps est frappé

0 commentaires

0
votes

Il n'y a rien que vous puissiez faire pour garder le navigateur de se bloquer autre que des bugs fixes qui provoquent le navigateur.

Vous pouvez au moins atténuer l'impact du crash en utilisant un navigateur comme Chrome qui séparent généralement des actes de l'onglet des autres (vous ne perdez donc votre page) ou simplement installer un navigateur séparé spécifiquement pour les tests. < / p>

En termes de suivi des données qui auraient pu être allés au journal, vous pouvez utiliser un plug-in comme Firebug qui possède un débogueur intégré afin que vous puissiez mettre en pause l'exécution de script à travers et examiner vos variables, probablement avant tout accident. se produit.


0 commentaires

1
votes

Si vous exécutez des programmes computilement coûteux sur votre navigateur, vous voudrez peut-être regarder en utilisant . En bref, ils vous permettent d'exécuter du code dans un fil différent qui ne verrouille pas le navigateur.


0 commentaires

1
votes

Si vous souhaitez simplement exécuter des programmes JavaScript en tant que tels, pourquoi n'utilisez-vous pas quelque chose comme node.js ou même rhinocéros? De cette façon, vous pouvez facilement enregistrer la sortie sans le perdre s'il entrave des «problèmes».


0 commentaires

1
votes

Je peux penser à deux possibilités prêtes:

1) Utilisez un débogueur qui a des points d'arrêt. Firebug est plutôt sympa. Safari et Chrome ont également des outils de débogage intégrés.

2) Vous pouvez déplacer votre test du navigateur en utilisant Mozilla Rhino et env-JS (Voir http://groups.google.com/group/envjs et http://github.com/thatcher/env-js )


0 commentaires

1
votes

Tous les navigateurs modernes (sauf opéra) doivent interrompre votre script s'il fonctionne pendant plus de 5 à 10 secondes ( source ).

in firefox, vous pouvez même Baisser ce seuil , si 10 secondes signifient une punition trop grande . Notez également que ce mécanisme frappe même lorsque vous exécutez le code de la console Firebug:

Scops Script sur Firefox http://img819.imageshack.us/img819/9655 /Infloopsp.jpg

Je pense que cette fonctionnalité seule devrait fournir un environnement assez sûr pour ces expériences de Loopy :)


3 commentaires

Lorsque je reçois la capture d'écran ci-dessus et que j'appuie, "Arrêtez le script", Firefox peut montrer comme "ne répondant pas" et gèle. Pour vous citer "Tous les navigateurs modernes (à l'exception de l'opéra) devraient interrompre votre script" - "devrait" est important ici - si elles ont fait alors il n'y aurait aucune raison pour que je pose cette question. Peut-être que cela est dû à mon environnement (addons, système d'exploitation, etc.) ou les intracacies de mes expériences (moins évidentes pour le navigateur / console que tandis que (vrai) ).


@ Yaya3: Oui, c'est pourquoi j'ai utilisé "devrait", comme je l'ai deviné, cela ne se produit pas pour vous. Par défaut, le mécanisme doit être lancé à chaque fois que le script fonctionne pendant 10 secondes. Il n'est pas nécessaire d'avoir une boucle infinie. JavaScript à l'intérieur des navigateurs n'a jamais été destiné à un traitement à long terme, car il s'exécute dans le fil d'interface utilisateur unique et bloque complètement les mises à jour de l'UI ... Vous voudrez peut-être vérifier le À propos de: config pour voir si cela est désactivé dans votre Firefox. Sinon, vous voudrez peut-être utiliser un autre navigateur pour les expériences de projet Euler.


Ah, mes excuses, j'ai mal compris votre réponse. Il est intéressant de regarder ces variables de navigateur. J'ai trouvé la réduction du DOM.MAX_Script_Run_Time a accéléré mes tests dans FF - Cheers.