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í)
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ý.
Zoberme si tento kód...
(function a() {
a();
})();
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ť...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
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.