2011-03-27 8 views
5

Necesito editar eficientemente documentos de texto grandes (p. Ej., Archivos de código fuente) en javascript.¿Hay alguna biblioteca para editar cadenas grandes de manera eficiente en Javascript?

insertAtPosition(n, str) y deleteAtPosition(n, length) deben ser rápidos.

Una implementación de cadena ingenua es lenta porque cada operación requiere copiar el contenido del documento en una nueva cadena.

Existen algunas maneras eficientes de hacerlo. Podría usar una matriz de líneas (Ace aka Bespin hace esto), pero esto sería lento cuando hay líneas súper largas o muchas líneas cortas. Una mejor implementación usaría skip lists o alguna otra estructura de datos inteligente.

Pero, esperaría que alguien ya lo haya implementado.

¿Hay alguna biblioteca que ya lo haga? Parece que no puedo encontrar nada útil con Google: ¿hay algún nombre común para este problema de algoritmo?

+2

cuerdas Proveedores: https://secure.wikimedia.org/wikipedia/en/wiki/Rope_%28computer_science%29 –

+0

quizás al uso 'source.split ('')' para dividirlo en caracteres, luego usa Array.splice nativo, que es O (n) en el peor. – Reid

+0

@Reid: la manipulación ingenua de cadenas ya es O (n), por lo que no lograría nada. Si las matrices en Javascript tienen gastos generales de memoria por elemento, su enfoque será más lento. –

Respuesta

2

No creo que haya otras bibliotecas para hacer esto, así que lo implementé usando listas de omisiones. Puede ser más rápido usar una estructura de datos en árbol, pero las listas de omisiones son fáciles de implementar y el cierre del javascript compilado es de solo 2.5 KB.

Si hay cualquier otra persona con el mismo problema, disfrutar de:

https://github.com/josephg/jumprope

Cuestiones relacionadas