Rumah >hujung hadapan web >tutorial js >Bagaimanakah anda menentukan dan menyelesaikan masalah had saiz tindanan JavaScript dalam penyemak imbas yang berbeza?
Limpahan tindanan JavaScript pihak pelanggan, terutamanya dalam Internet Explorer (IE), boleh timbul disebabkan oleh saiz tindanan terhad berbanding pelayar lain. Isu ini sering dihadapi apabila menggunakan perpustakaan pihak ketiga yang membuat banyak panggilan fungsi.
Untuk menentukan had saiz tindanan untuk penyemak imbas yang berbeza, ujian HTML berikut telah dibangunkan:
<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>
Ujian mendedahkan bahawa IE8 menimbulkan limpahan tindanan pada kira-kira 3200 panggilan fungsi, manakala Firefox dan Chrome menyokong rekursi yang jauh lebih mendalam.
Untuk mengenal pasti fungsi JavaScript tertentu yang menyebabkan limpahan tindanan dalam IE, ia berguna untuk:
JavaScript tidak menyediakan keupayaan surih tindanan secara asli. Walau bagaimanapun, alatan pembangun penyemak imbas (cth., Chrome DevTools, Alat Pembangun Firefox) menawarkan cara untuk memaparkan tindanan panggilan pada masa ralat.
Ujian yang dipermudahkan menggunakan fungsi inc() rekursif juga boleh digunakan untuk menentukan saiz tindanan maksimum dalam penyemak imbas tertentu:
<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>
Ujian ini akan mencetak saiz tindanan maksimum ke konsol selepas limpahan tindanan berlaku.
Atas ialah kandungan terperinci Bagaimanakah anda menentukan dan menyelesaikan masalah had saiz tindanan JavaScript dalam penyemak imbas yang berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!