Viac na
Prekročenie maximálnej veľkosti zásobníka volaní
Používam súbor knižnice JavaScript Direct Web Remoting (DWR) a dostávam chybu iba v prehliadači Safari (počítač a iPad)
Hovorí to
Prekročená maximálna veľkosť zásobníka volaní.
Čo presne táto chyba znamená a zastaví sa úplne spracovanie?
Tiež nejaká oprava pre prehliadač Safari
(V skutočnosti na iPad Safari
, píše
JS:execution exceeded timeout
čo predpokladám, že je rovnaký problém so zásobníkom volaní)
473
3
To znamená, že niekde v kóde voláte funkciu, ktorá následne volá ďalšiu funkciu a tak ďalej, až kým nenarazíte na limit zásobníka volaní.
Takmer vždy je to spôsobené rekurzívnou funkciou so základným prípadom, ktorý nie je splnený.
Zobrazenie zásobníka
Zoberme si tento kód...
Tu je zásobník po niekoľkých volaniach...
Ako vidíte, zásobník volaní rastie, kým nenarazí na limit: pevne nastavenú veľkosť zásobníka prehliadača alebo vyčerpanie pamäte.
Aby ste to napravili, zabezpečte, aby vaša rekurzívna funkcia mala základný prípad, ktorý je schopný splniť...
Niekedy sa vám to môže stať, ak omylom importujete/vložíte ten istý súbor JavaScriptu dvakrát, čo sa oplatí skontrolovať na karte zdrojov v inšpektore.
Niekde vo vašom kóde sa nachádza rekurzívna slučka (t. j. funkcia, ktorá sa nakoniec volá znova a znova, kým sa zásobník nezaplní).
Iné prehliadače majú buď väčšie zásobníky (takže namiesto nich sa zobrazí timeout), alebo z nejakého dôvodu chybu pohltia (možno zle umiestnený try-catch).
Pomocou ladiaceho programu skontrolujte zásobník volaní, keď dôjde k chybe.