Limite de tamanho de pilha do navegador JavaScript

Eu estou recebendo alguns problemas de estouro de pilha JavaScript do lado do cliente especificamente no navegador IE, isso está acontecendo dentro de uma biblioteca de terceiros que faz algumas chamadas de function e por algum motivo eles ocasionalmente freio no IE apenas devido ao seu limite de pilha baixa.

Eu então codifiquei um pequeno HTML de teste para testar o limite de tamanho de pilha para alguns navegadores e descobri que o IE8 tem um limite de pilha pequena se comparado ao FF 7 ou Chrome 14 em um laptop com Windows 7, 8Gb RAM:

    function doSomething(){ var i = 3200; doSomethingElse(i); } function doSomethingElse(i){ if (i == 0) return -1; doSomethingElse(i-1); } doSomething();     

O IE aumenta o estouro de pilha quando os valores estão em torno de 3200, o Firefox e o Chrome podem lidar com uma recursion muito profunda se comparado ao IE.

Gostaria de saber se há uma maneira de vincular a exceção de estouro de pilha à function Javascript que a elevou durante o tempo de execução no IE ou em qualquer outro navegador e se poderia fornecer ao stacktrace a cadeia de funções na pilha no momento em que o erro foi levantado.

    Usando um teste simples :

     var i=0; function inc() { i++; inc(); } inc(); 

    Internet Explorer

    • IE6: 1130
    • IE7: 2553
    • IE8: 1475
    • IE9: 20678
    • IE10: 20677

    Mozilla Firefox

    • 3,6: 3000
    • 4,0: 9015
    • 5,0: 9015
    • 6,0: 9015
    • 7,0: 65533
    • 8b3: 63485
    • 17: 50762
    • 18: 52596
    • 19: 52458
    • 42: 281810

    Google Chrome

    • 14: 26177
    • 15: 26168
    • 16: 26166
    • 25: 25090
    • 47: 20878
    • 51: 41753

    Safári

    • 4: 52426
    • 5: 65534
    • 9: 63444

    Ópera

    • 10h10min: 9999
    • 10,62: 32631
    • 11: 32631
    • 12: 32631

    Em relação à sua pergunta, use as ferramentas de desenvolvedor do seu navegador para ver a pilha. No IE 8+, pressione F12 , vá para a guia Script e clique em Start Debugging. Ele será interrompido quando uma exceção for lançada e você poderá ver a pilha de chamadas. Você também pode usar as ferramentas de desenvolvedor do Chrome, Ctrl + Shift + J.

    Isso é específico do navegador, não apenas o tamanho da pilha, mas também otimizações, como otimização de recursion de cauda e outras coisas. Eu acho que a única coisa confiável aqui é codificar de uma forma que não coloque toneladas de coisas na pilha, ou testar manualmente (lendo profundamente na documentação de) cada navegador. Afinal, quando você vê o erro de “recursion excessiva” ou similar, você já sabe que há algo realmente errado com seu código.