buenas,
solo a modo de observación... en lugar de realizar reemplazos al string innerHTML, yo lo trabajaría a nivel de nodos con un iterador. particularmente porque al volver asignar el string a innerHTML el navegador tiene que volver a interpretar el código; aunque también depende mucho del contenido. si el contenido es simple texto, no creo que cause tanto problema o efectos secundarios. pero si en el contenido hay recursos externos (como imágenes) o algún scripting aplicado (generalmente eventos), hay una gran probabilidad de que el navegador vuelva a realizar una petición para cargar los recursos o que los eventos colapsen. con un iterador de nodos, lo más seguro te puedas evitar esas situaciones, aunque no te salvas del hecho de que la forma de trabajarlo puede ser más complicado -especialmente si no se tiene un buen énfasis en la manipulación de nodos-, pero tengo fé de que podría ser más efectivo.