Каковы ограничения рекурсии js для Firefox, Chrome, Safari, IE и т.д.?
У меня есть код Javascript, который использует довольно глубокую рекурсию, и я хотел бы узнать, каковы пределы рекурсии в разных браузерах (т.е. точка, в которой произойдет ошибка "слишком много рекурсии" ).
У кого-нибудь есть целые числа на этом, по версии?
Ответы
Ответ 1
Николай К. Закас пишет в своем блоге:
- Internet Explorer 7: 1,789
- Firefox 3: 3000
- Chrome 1: 21 837
- Opera 9.62: 10 000
- Safari 3.2: 500
Вот еще несколько данных о разных браузерах и ОС здесь.
Я создал тест Browserscope, чтобы получить больше даты. Запустите его здесь.
Ответ 2
Чтобы добавить к ответам здесь, это может зависеть и от функций, участвующих в рекурсии. Например, просто добавление нескольких параметров в функцию может изменить результат:
var i=0;
function inc() {
i++;
inc();
}
inc();
дает мне 20923, но
var i=0;
function inc(j, k, l) {
i++;
inc(l, k, j);
}
inc(1, 2, 3);
сообщает 13949 (протестирован в консоли в Chromium 39). Firefox 34 дает 25085 и 13572 соответственно.
Добавление блока try/catch вокруг тела нулевого аргумента inc()
дает 11413 кадров в Chromium и 13161 в Firefox. С 3 аргументами и блоком try/catch, 8967 в Chrome и 7517 в Firefox.
Мой взнос от этого заключается в том, что приложение, которое работает вблизи глубины стека в браузере, возможно, только может понять это на основе эмпирических измерений функций, похожих на те, которые используются в приложении.