Clientseitige JavaScript-Stack-Überläufe, insbesondere im Internet Explorer (IE), können aufgrund von a auftreten begrenzte Stapelgröße im Vergleich zu anderen Browsern. Dieses Problem tritt häufig auf, wenn Bibliotheken von Drittanbietern verwendet werden, die zahlreiche Funktionsaufrufe durchführen.
Um die Stapelgrößenbeschränkung für verschiedene Browser zu ermitteln, wurde der folgende HTML-Test entwickelt:
<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>
Der Test ergab, dass IE8 bei etwa 3200 Funktionsaufrufen einen Stapelüberlauf verursachte, während Firefox und Chrome eine deutlich tiefere Rekursion unterstützten.
Zur Identifizierung B. die spezifische JavaScript-Funktion, die den Stapelüberlauf im IE verursacht, wäre es nützlich:
JavaScript bietet nativ keine Stack-Trace-Funktion. Allerdings bieten Browser-Entwicklertools (z. B. Chrome DevTools, Firefox Developer Tools) Möglichkeiten, den Aufrufstapel zum Zeitpunkt eines Fehlers anzuzeigen.
Ein vereinfachter Test mit Eine rekursive inc()-Funktion kann auch verwendet werden, um die maximale Stapelgröße in einem bestimmten Browser zu bestimmen:
<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>
Dieser Test gibt die maximale Stapelgröße auf der Konsole aus, nachdem der Stapelüberlauf aufgetreten ist.
Das obige ist der detaillierte Inhalt vonWie ermitteln und beheben Sie Einschränkungen hinsichtlich der Größe des JavaScript-Stacks in verschiedenen Browsern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!