Maison >interface Web >js tutoriel >Comment déterminer et résoudre les limitations de taille de pile JavaScript dans différents navigateurs ?

Comment déterminer et résoudre les limitations de taille de pile JavaScript dans différents navigateurs ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 08:37:02429parcourir

How do you determine and troubleshoot JavaScript stack size limitations in different browsers?

Débogage des limitations de taille de la pile JavaScript

Contexte

Des débordements de pile JavaScript côté client, en particulier dans Internet Explorer (IE), peuvent survenir en raison d'un taille de pile limitée par rapport aux autres navigateurs. Ce problème est souvent rencontré lors de l'utilisation de bibliothèques tierces qui effectuent de nombreux appels de fonctions.

Test de la limite de taille de pile

Pour déterminer la limite de taille de pile pour différents navigateurs, le test HTML suivant a été développé :

<code class="html"><!DOCTYPE html>
<html>
<head>
  <title>Stack Size Limit Test</title>
</head>
<body>
  <script type="text/javascript">
    function doSomething() {
      var i = 3200;
      doSomethingElse(i);
    }

    function doSomethingElse(i) {
      if (i == 0) return -1;
      doSomethingElse(i-1);
    }

    doSomething();
  </script>
</body>
</html></code>

Le test a révélé qu'IE8 provoquait un débordement de pile à environ 3 200 appels de fonction, tandis que Firefox et Chrome prenaient en charge une récursion beaucoup plus profonde.

Identifier le coupable

Pour identifier la fonction JavaScript spécifique provoquant le débordement de pile dans IE, il serait utile de :

  • Lier l'exception de débordement de pile à la fonction qui l'a déclenchée pendant l'exécution.
  • Obtenir une pile trace avec la chaîne de fonctions dans la pile au moment de l'erreur.

JavaScript Stack Trace

JavaScript ne fournit pas nativement de fonctionnalité de trace de pile. Cependant, les outils de développement de navigateurs (par exemple, Chrome DevTools, Firefox Developer Tools) offrent des moyens d'afficher la pile d'appels au moment d'une erreur.

Test de limite de taille de pile plus simple

Un test simplifié utilisant une fonction récursive inc() peut également être utilisée pour déterminer la taille maximale de la pile dans un navigateur donné :

<code class="js">var i = 0;
function inc() {
  i++;
  inc();
}

try {
  inc();
}
catch(e) {
  // The StackOverflow sandbox adds one frame that is not being counted by this code
  // Incrementing once manually
  i++;
  console.log('Maximum stack size is', i, 'in your current browser');
}</code>

Ce test imprimera la taille maximale de la pile sur la console après le débordement de pile.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn