Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Por qué la memoria del JavaScript se sobrecarga con este script?

15 de junio de 2016

Hola a todos.

Tengo el siguiente código JavaScript que se fija dentro de los elementos y si el texto se sale del contenedor miniza la letra hasta que quepa. EL problema es que en mi navegador funciona perfecto pero en otro me da error de memoria overflow. Necesito que alguien me ayude a optimizarlo. Uso jQuery!!!

function isOverflow(el)
    {
       var curOverflow = el.style.overflow;
 
       if ( !curOverflow || curOverflow === "visible" )
          el.style.overflow = "hidden";
 
       var isOverflowing = el.clientWidth < el.scrollWidth 
          || el.clientHeight < el.scrollHeight;
 
       el.style.overflow = curOverflow;
 
       return isOverflowing;
    }
 
    function checkElementOverflow()
    {
        $('.html-model > div span').each(function(i, n){
            while(isOverflow(n)){
                var fontSize = parseInt($(n).css("font-size"));
                fontSize = fontSize - 1 + "px";
                $(n).css({'font-size':fontSize});
            }
        });
    }
 
    $(function(){
        checkElementOverflow();
    });

Respuestas

#1

Lo primero te aconsejaría que probaras en otros navegadores para saber si también sucede ese problema. Si es así, el segundo paso sería utilizar el profiler de Google Chrome, Firefox, etc. para ver exactamente quién es el responsable de ese consumo desmedido de memoria.

Sin los datos objetivos de un profiler es muy difícil optimizar el rendimiento, ya que tienes que guiarte por el método de "prueba y error" hasta que encuentres la solución.

En cualquier caso, por si te sirve de inspiración, en estas líneas puedes ver el código fuente de un plugin de jQuery llamado textfill que hace justo lo que quieres.

@javiereguiluz

15 junio 2016, 22:31