Desempenho ruim do Firefox RegEx

Eu uso o gerador de analisador de JavaScriptJISON para criar um analisador para alguns scripts que meus usuários criam. Ultimamente tenho notado que o processo de análise no Firefox é por um fator muito mais lento do que em qualquer outro navegador que minha página suporta (IE10, mais recente Chrome & Opera).

Depois de cavar um pouco na fonte do analisador gerado, reduzi o problema a uma linha de código que executa algum regex para tokenizar o código a ser analisado. Claro que esta linha é executada com bastante frequência.

Eu criei um pequeno caso de teste com alguma cadeia aleatória (~ 1300 caracteres) e uma regex bastante genérica. Este caso de teste mede o tempo médio necessário para executar o regex 10000 vezes (Exemplo de trabalho no JSFiddle):

$(document).ready(function() {
    var str = 'asdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj ölkasjd flöaksjdf löask dfjkasdfasdfa asdfasdf asdf asdf asdfasödlfkja asldfkj asdölkfj aslödkjf aösldkfj',
        regex = new RegExp('^([0-9])+'),
        durations = [],
        resHtml = 'Durations:',
        totalDuration = 0,
        matches, start;

    // Perform "timing test" 10 times to get some average duration
    for (var i = 0; i < 10; i++) {
        // Execute regex 10000 times and see how long it takes
        start = window.performance.now();
        for (var j = 0; j < 10000; j++) {
            regex.exec(str);
        }
        durations.push(window.performance.now() - start);
    }

    // Create output string and update DIV
    for (var i = 0; i < durations.length; i++) {
        totalDuration += durations[i];
        resHtml += '<br>' + i + ': ' + (parseInt(durations[i] * 100, 10) / 100) + ' ms';
    }
    resHtml += '<br>==========';
    resHtml += '<br>Avg: ' + (parseInt((totalDuration / durations.length) * 100, 10) / 100) + ' ms';

    $('#result').html(resHtml);
});

A seguir estão os resultados do teste na minha máquina:

Firefox 24: O tempo médio é entre370 e 450 ms para 10000 execuções de regex
Chrome 30, Opera 17, IE 10: O tempo médio é entre0,3 e 0,6 ms

Essa diferença fica ainda maior se a string para teste ficar maior. Uma cadeia longa de 6000 caracteres aumenta o tempo médio no Firefox para~ 1,5 segundos (!) enquanto os outros navegadores ainda precisam~ 0,5 milissegundos (!) (Exemplo de trabalho no JSFiddle com 6000 caracteres).

Por que existe uma diferença de desempenho tão grande entre o Firefox e todos os outros navegadores e posso melhorá-lo de qualquer maneira?

Por favor, note que eu não posso ajustar os regexes executados porque eles são gerados principalmente pelo gerador de analisador e eu não quero alterar manualmente o código construído do analisador.

questionAnswers(1)

yourAnswerToTheQuestion