Q:

Performance de substituição em string

Preciso fazer algumas operações de substituição em massa com Javascript. Para o meu problema específico, vamos supor que preciso substituir uma substring específica. Preciso trocar cada ocorrência de "azul" por "verde".
Então, tenho duas formas de fazer:
var foo = pegaTexto(); // imagine que isso retorna uma string qualquer;
foo = foo.replace("azul", "verde");

Ou:
var foo = pegaTexto();
foo = foo.replace(new RegExp("azul"), "verde");

A meu ver, numa situação dessas, a única utilidade prática de se utilizar uma expressão regular seria para especificar uma flag (para dizer por exemplo se a busca deve ser global), mas no meu caso estou omitindo as flags do construtor  da expressão.
Tenho uma dúvida, no entanto, com relação a performance dessas duas formas distintas.
Forçar o uso de expressão regular provoca algum impacto na performance?
Como eu posso medir isso?

A:

Você pode usar o jsperf.com, aí é possivel montar testes para testar variações diferentes.  
Fiz um teste e deu-me 13~15% mais lento com RegExp.
O código que usei:
var texto = 'amarelo verde encarnado azul branco';

// com regex    
var regex = new RegExp("azul");
for(var i = 0; i < 50000; i++){
   var resultado = texto.replace(regex, "verde");
}

// com replace de string
for(var i = 0; i < 50000; i++){
   var resultado = texto.replace("azul", "verde");
}

A maneira mais rápida para esta função parece contudo ser o split/join - partir a string a cada palavra e voltar a juntar com a palavra nova. Crédito para a resposta do @utluiz.
var novaString = texto.split('palavraAntiga').join('palavraNova');

A:

Acrescentei mais duas técnicas de substituição que não usam expressões regulares ao jsperf original do Sergio.
split/join
var resultado = texto.split('azul').join('verde');

indexOf
var pos = texto.indexOf('azul');
var ultpos = 0;
var resultado = '';
while (pos >= 0) {
    resultado += texto.substring(ultpos, pos) + 'verde';
    ultpos = pos + 4;
    pos = texto.indexOf('azul', pos + 4);
}
if (ultpos < texto.length) {
    resultado += texto.substring(ultpos, texto.length);
}

Resultados
Analisando os resultados em outros navegadores por outros usuários, notei que não existem um consenso sobre o método mais rápido.
Veja o gráfico no momento em que escrevo:

Em resumo:

split/join ganha no Chrome
indexOf ganha no Firefox e no Ópera
regex ganha no IE :/

