quinta-feira, abril 06, 2006

StringBuffer em Javascript

Quem programa em Java sabe que operações de concatenações de String são muito mais eficientes utilizando StringBuffer e função append do que usando o comando String A = String B + String C. Isso porque a cada operação de soma dessas, uma nova String é alocada para que seja feita a cópia dos dados, e alocação de memória em Java é uma operação cara.

Em Javascript, esse problema também ocorre. Pesquisando na Internet, descobri um código que simula o comportamento de um StringBuffer em nessa linguagem. Fizemos alguns testes no IE e no firefox, com um loop que concatena Strings. No Firefox, a diferença entre usar o operador + e a função append é pequena. A grande vantagen é que a segunda é mais estável em termos de performance que a primeira.

Em compensação, no IE o uso de append é absurdamente mais eficiente do que no firefox. Testes mostram que para concatenar 1000 Strings de tamanho 100, o append era 60 vezes mais rápido. Portanto, seu uso é altamente recomendável em scripts que façam muitas concatenações e que precisam ser otimizados.

Segue o código:


function StringBuffer() {
this.buffer = [];
};

StringBuffer.prototype.append = function append(string) {
this.buffer.push(string);
return this;
};

StringBuffer.prototype.toString = function toString() {
return this.buffer.join("");
};
Para usar, basta criar uma variável do tipo StringBuffer:

var buffer = new StringBuffer();

1 Comments:

Anonymous Bruno said...

Muito muito foda, eu usei e vi q fica muito mais rapido a minha lisa, eu estou fazendo uma list boxe personalizada e fiz com 60.000 itens para simular velocidade, sem comparação.

6/30/2006 09:27:00 PM  

Postar um comentário

Links to this post:

Criar um link

<< Home