Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah anda menentukan dan menyelesaikan masalah had saiz tindanan JavaScript dalam penyemak imbas yang berbeza?

Bagaimanakah anda menentukan dan menyelesaikan masalah had saiz tindanan JavaScript dalam penyemak imbas yang berbeza?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 08:37:02343semak imbas

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

Penyahpepijatan Pengehadan Saiz Tindanan JavaScript

Latar Belakang

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.

Menguji Had Saiz Tindanan

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.

Mengenalpasti Pesalah

Untuk mengenal pasti fungsi JavaScript tertentu yang menyebabkan limpahan tindanan dalam IE, ia berguna untuk:

  • Mengikat pengecualian limpahan tindanan dengan fungsi yang menaikkannya semasa masa jalan.
  • Mendapatkan tindanan jejak dengan rantaian fungsi dalam tindanan pada masa ralat.

JavaScript Stack Trace

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 Had Saiz Tindanan Lebih Mudah

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn