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

Linda Hamilton
Lepaskan: 2024-10-27 08:37:02
asal
342 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!