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.
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.
Pour identifier la fonction JavaScript spécifique provoquant le débordement de pile dans IE, il serait utile de :
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.
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!