Problemas al optimizar plantilla en Blogger con jquery.min.js

  • Autor Autor leit0s
  • Fecha de inicio Fecha de inicio
leit0s

leit0s

Eta
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Hola betas estoy optimizando una plantilla en blogger siguiendo algunos consejos de pagespeed y del blog del usuario Emilio Cobos, todo ok hasta el punto donde llego al jquery.min.js el cual tiene relación con dos menús desplegables sucede que como indican para mejorar la carga debo cargar asincronamente el js, lo he realizado asi <script async='async' src='https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js' type='text/javascript'></script> pero al colocarlo, deja de funcionar el java, alguna solución, esta carga afecta mucho en la plantilla algo de 5 puntos en el test, espero y puedan darme una ayuda, saludos.

adjunto código extraído de la plantilla blogger


Insertar CODE, HTML o PHP:
<style type='text/css'>
/* Navigation
----------------------------------------------- */
#nav{background-image:url(http://4.bp.blogspot.com/-Qfv2CUXkZQE/UJOrNu3iNAI/AAAAAAAAGc8/wvy8sCPa8HA/s1600/main-menu-bg.png);background-repeat:repeat-x;height:57px;border-bottom:5px solid #A00F0F;padding-left:10px}
#nav ul{height:52px;margin:0;padding:0}
#nav li{position:relative;display:inline-block;float:left;border:1px solid #222;border-width:0 0 0 1px;height:47px;margin-top:5px}
#nav li a{display:block;line-height:45px;height:45px;text-decoration:none;color:#D5D5D5;padding:0 15px;text-shadow:0 1px 1px black;border-left:1px solid #383838}
#nav li:last-child a{border-right:0 none}
#nav li a:hover{color:#fff}
#nav ul.submenu li{float:none;width:100%;margin:0;border-bottom:1px solid #222;border-top:1px solid #383838;border-left:0 none;height:30px}
#nav ul.submenu{display:none;padding:0;position:absolute;top:42px;width:180px;z-index:99;float:left;background:#2D2D2D!important;-webkit-box-shadow:0 3px 4px 1px rgba(0,0,0,0.2);box-shadow:0 3px 4px 1px rgba(0,0,0,0.2);-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-bottom-right-radius:3px;-moz-border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;height:auto}
#nav ul.submenu.hidden{display:block;-khtml-opacity:0;-moz-opacity:0;opacity:0;visibility:hidden;-webkit-transition:all 0.5s ease 0s;-o-transition:all 0.5s ease 0s;transition:all 0.5s ease 0s;-moz-transition:all 0.5s ease 0s}
#nav li:hover ul.submenu.hidden{-khtml-opacity:1;-moz-opacity:1;opacity:1;visibility:visible}
#nav ul.submenu li:first-child{border-top:0 none}
#nav ul.submenu a{height:30px;line-height:1em;padding:7px 10px}
#nav ul.submenu a:hover{padding-left:15px}
#nav li.mhome{border:0;margin-top:0;height:52px}
#nav li.mhome a{height:52px;border-left:0 none;text-indent:-9999px;width:55px;background-color:#A00F0F;background-image:url('http://4.bp.blogspot.com/-BPpsKK84W2w/UJV6sFxkqDI/AAAAAAAAGgc/3TwsYkMwxsE/s1600/home+(1).png');background-repeat:no-repeat;background-position:50% 9px}
#menuatas{color:#474747;background:#F1F1F1;padding:3px 0;border-bottom:1px solid #CCC}
#menuatas a:hover{text-decoration:none}
#ktuskrg{display:inline-block;height:18px;float:left;line-height:18px;padding:0 10px;border-right:1px solid #ACACAC}
#navtop{display:inline-block;margin-left:5px}
#navtop ul,#navtop li{padding:0;margin:0;list-style:none}
#navtop li{float:left;height:18px;position:relative}
#navtop li a{height:18px;padding:0 10px;line-height:18px;display:block}
#navtop li.dgnsubtop{padding-right:10px;background-image:url(http://4.bp.blogspot.com/-NTKXiugkHrs/UIeVQmEzDjI/AAAAAAAAGJ4/G92p5n8hgvY/s7/downarrow-dark.png);background-repeat:no-repeat;background-position:90% 50%}
#navtop ul.sub-menu-top{display:none;position:absolute;width:140px;background:#F1F1F1;top:23px;-webkit-box-shadow:0 3px 4px 1px rgba(0,0,0,0.2);-moz-box-shadow:0 3px 4px 1px rgba(0,0,0,0.2);box-shadow:0 3px 4px 1px rgba(0,0,0,0.2);z-index:2}
#navtop ul.sub-menu-top.hidden{display:block;-khtml-opacity:0;-moz-opacity:0;opacity:0;visibility:hidden;-webkit-transition:all 0.5s ease 0s;-o-transition:all 0.5s ease 0s;transition:all 0.5s ease 0s;-moz-transition:all 0.5s ease 0s}
#navtop li:hover ul.sub-menu-top.hidden{-khtml-opacity:1;-moz-opacity:1;opacity:1;visibility:visible}
#navtop ul.sub-menu-top li{width:100%;height:22px;border-bottom:1px solid white;border-top:1px solid lightGrey}
#navtop ul.sub-menu-top li:first-child{border-top:0 none}
#navtop ul.sub-menu-top a:hover{padding-left:15px}
</style>


<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js' type='text/javascript'></script>
<script async='async' src='http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js' type='text/javascript'></script>
<script type='text/javascript'>
      //<![CDATA[
      // JQuery hover event with timeout by Taufik Nurrohman
      // https://plus.google.com/108949996304093815163/about
      (function(a){
        a.fn.hoverTimeout=function(c,e,b,d){
          return this.each(function(){
            var f=null,g=a(this);
            g.hover(function(){
              clearTimeout(f);
              f=setTimeout(function(){
                e.call(g)}
                           ,c)}
                    ,function(){
                      clearTimeout(f);
                      f=setTimeout(function(){
                        d.call(g)}
                                   ,b)}
                   )}
                          )}
      }
      )(jQuery);
      // SelectNav.js (v. 0.1)
      // Converts your <ul>/<ol> navigation into a dropdown list for small screens
      // https://github.com/lukaszfiszer/selectnav.js
      window.selectnav=function(){
        return function(p,q){
          var a,h=function(b){
            var c;
            b||(b=window.event);
            b.target?c=b.target:b.srcElement&&(c=b.srcElement);
            3===c.nodeType&&(c=c.parentNode);
            c.value&&(window.location.href=c.value)}
          ,k=function(b){
            b=b.nodeName.toLowerCase();
            return"ul"===b||"ol"===b}
          ,l=function(b){
            for(var c=1;document.getElementById("selectnav"+c);c++);
            return b?"selectnav"+c:"selectnav"+(c-1)}
          ,n=function(b){
            g++;
            var c=b.children.length,a="",d="",f=g-1;
            if(c){
              if(f){
                for(;f--;)d+=r;
                d+=" "}
              for(f=0;f<
                  c;f++){
                var e=b.children[f].children[0];
                if("undefined"!==typeof e){
                  var h=e.innerText||e.textContent,i="";
                  j&&(i=-1!==e.className.search(j)||-1!==e.parentElement.className.search(j)?m:"");
                  s&&!i&&(i=e.href===document.URL?m:"");
                  a+='<option value="'+e.href+'" '+i+">"+d+h+"</option>";
                  t&&(e=b.children[f].children[1])&&k(e)&&(a+=n(e))}
              }
              1===g&&o&&(a='<option value="">'+o+"</option>"+a);
              1===g&&(a='<select class="selectnav" id="'+l(!0)+'">'+a+"</select>");
              g--;
              return a}
          };
          if((a=document.getElementById(p))&&k(a)){
            document.documentElement.className+=
              " js";
            var d=q||{
            }
            ,j=d.activeclass||"active",s="boolean"===typeof d.autoselect?d.autoselect:!0,t="boolean"===typeof d.nested?d.nested:!0,r=d.indent||"\u2192",o=d.label||"- Navigation -",g=0,m=" selected ";
            a.insertAdjacentHTML("afterend",n(a));
            a=document.getElementById(l());
            a.addEventListener&&a.addEventListener("change",h);
            a.attachEvent&&a.attachEvent("onchange",h)}
        }
      }
      ();
      //]]>
</script>


<div id='navtop'>
<ul id='menuhlng'>
<li>
<a href='#'>
                  Menu1
                </a>
</li>
<li>
<a href='#'>
                  Menu2
                </a>
</li>
<li>
<a href='#'>
                  Menu3
                </a>
</li>
<li>
<a href='#'>
                  Menu4
                </a>
</li>
</ul>
</div>


<nav id='nav'>
<ul id='menuhlng1'>
<li class='mhome'>
<a href='#'>
                Home
              </a>
</li>
<li>
<a href='/p/terminos-y-condiciones.html'>
                Terminos y Condiciones
              </a>
</li>
<li>
<a href='/p/politicas-de-privacidad.html'>
                Politicas de Privacidad
              </a>
</li>
<li>
<a href='/p/cookies.html'>
                Cookies
              </a>
</li>
<li>
<a href='/p/derechos-de-autor.html'>
                Derechos de Autor
              </a>
</li>
</ul>
</nav>
<script type='text/javascript'>
          //<![CDATA[
          $(document).ready(function(){
            selectnav('menuhlng', {
              label: 'Seleccione Categoria ',
              nested: true,
              autoselect: false,
              indent: '-'
            });
            selectnav('menuhlng1', {
              label: 'Ir al Menú ',
              nested: true,
              autoselect: false,
              indent: '-'
            });
          });
          //]]></script>
<script type='text/javascript'>
          //<![CDATA[
          $('#nav li ul, #navtop li ul').removeClass('hidden');
          $('#nav li, #navtop li').hoverTimeout(100, function() {
            $('ul', this).filter(':not(:animated)').slideDown(600, 'easeOutBounce');
          }, 500, function() {
            $('ul', this).slideUp(800, 'easeInExpo');
          });
          //]]></script>
 
hola leit0s,

por lo que he leído en stackoverflow si usas async al cargar los javascripts estos pueden no cargarse por orden, por lo que veo usas jquery-ui si éste depende de jquery y ambos tienen async, puede que a veces cargue primero jquery-ui y luego falle todo lo que dependa de jquery-ui, por lo que es mejor que no cargues jquery en async.

aquí tienes el tema por si quieres leer más
html5 - By async="async" tag in javascript sometimes my JS files have 'undefined is not a function' Why ? How to force some how Sequence between them? - Stack Overflow

puedes probar de cargar jquery desde otro CDN para ver si carga más rápido
The best CDN for jQuery in 2012
 
Última edición:
Gracias miquelcamps por tu respuesta. Lo que sucede esque estoy trabajando desde blogger y si los cargo desde googleapis es porque es el mas rápido hasta donde tengo entendido, intente copiando todo el jquery funciono de una manera pero no como los resultados async, mas que todo necesito hacer funcionar esos menus que aparecen cuando esta en responsive la web, pensé que cambiando la posiciones de los script funcionaria pero nada aun, relativamente no se que parte de los dos scrip necesita para funcionar el código pues si supiera solo sacaría esa parte y así correría, alguna idea amigo. :encouragement:

Pdta: ya son 61 seguidores en tu canal 😀


hola leit0s,

por lo que he leído en stackoverflow si usas async al cargar los javascripts estos pueden no cargarse por orden, por lo que veo usas jquery-ui si éste depende de jquery y ambos tienen async, puede que a veces cargue primero jquery-ui y luego falle todo lo que dependa de jquery-ui, por lo que es mejor que no cargues jquery en async.

aquí tienes el tema por si quieres leer más
html5 - By async="async" tag in javascript sometimes my JS files have 'undefined is not a function' Why ? How to force some how Sequence between them? - Stack Overflow

puedes probar de cargar jquery desde otro CDN para ver si carga más rápido
The best CDN for jQuery in 2012
 
leit0s creo que jquery no deberías cargarlo en async y jqueyr ui si en async para que no te de error.

luego estoy dudando con los css y js si los deberías separar en ficheros aparte para que cacheen, luego tendrías más peticiones pero creo que sólo afecta la primera vez que carga la página.

si usas analytics hay la opción de cargar en async
https://developers.google.com/speed/pagespeed/module/filter-make-google-analytics-async

para comprimir imágenes puedes mirar de usar este servicio
https://kraken.io/

o probar alguna de estas 18 herramientas para quitar peso a las imágenes
18 Image Compressors to Speed Up Your Website

Espero que puedas bajar más tu pagespeed 😉

p.d. muchas gracias por suscribirte!!
 
Última edición:
Muchas gracias miquelcamps yo uso el riot para las imágenes, al final termine por quitar el java como solo era para el menú, me consegui otro solo css y lo adapte muy similar en forma y color al que tenia y walaa mejoro drasticamente la plantilla, aunque hago test con 3 entradas de prueba aun falta probar con nuevas equivalentes a las que en un futuro tendrá ya que no puedo hacer mucho aun porque tengo que hacer un pequeño código el cual la pc con la que cuento ahora (p4/ran1gb) no me da mucho que hacer mas que se reinicia cada cierto tiempo, muchas gracias por tu ayuda, ahora solo falta seguir testeando. :encouragement:

Pdta: tengo un amigo que vive en alicante y gracias e el conozco un poco de tu país por historia claro jeje y me entusiasma mucho aprender de ustedes y lo avanzado que están, saludos.



leit0s creo que jquery no deberías cargarlo en async y jqueyr ui si en async para que no te de error.

luego estoy dudando con los css y js si los deberías separar en ficheros aparte para que cacheen, luego tendrías más peticiones pero creo que sólo afecta la primera vez que carga la página.

si usas analytics hay la opción de cargar en async
https://developers.google.com/speed/pagespeed/module/filter-make-google-analytics-async

para comprimir imágenes puedes mirar de usar este servicio
https://kraken.io/

o probar alguna de estas 18 herramientas para quitar peso a las imágenes
18 Image Compressors to Speed Up Your Website

Espero que puedas bajar más tu pagespeed 😉

p.d. muchas gracias por suscribirte!!
 
Atrás
Arriba