Possible to defer loading of jQuery?

前端 未结 16 973
孤街浪徒
孤街浪徒 2020-11-28 19:26

Let\'s face it, jQuery/jQuery-ui is a heavy download.

Google recommends deferred loading of JavaScript to speed up initial rendering. My page uses jQuery to set up s

相关标签:
16条回答
  • 2020-11-28 19:36

    Well it seems to me, all you have to do is either a) add the jQuery code you want to run on load, to the end of the jQuery file or b) append it to the downloadJSAtOnload function like so:

    <script type="text/javascript">
    
     // Add a script element as a child of the body
     function downloadJSAtOnload() {
     var element = document.createElement("script");
     element.src = "deferredfunctions.js";
     document.body.appendChild(element);
     $("#tabs").tabs(); // <==== NOTE THIS. This should theoretically run after the
                        // script has been appended, though you'll have to test this
                        // because I don't know if the JavaScript above will wait for
                        // the script to load before continuing
     }
    
     // Check for browser support of event handling capability
     if (window.addEventListener)
     window.addEventListener("load", downloadJSAtOnload, false);
     else if (window.attachEvent)
     window.attachEvent("onload", downloadJSAtOnload);
     else window.onload = downloadJSAtOnload;
    
    </script>
    
    0 讨论(0)
  • 2020-11-28 19:38

    Appears that you just need <script defer> : http://www.w3schools.com/tags/att_script_defer.asp

    0 讨论(0)
  • 2020-11-28 19:39

    Try this, which is something I edited a while ago from the jQuerify bookmarklet. I use it frequently to load jQuery and execute stuff after it's loaded. You can of course replace the url there with your own url to your customized jquery.

    (function() {
          function getScript(url,success){
            var script=document.createElement('script');
            script.src=url;
            var head=document.getElementsByTagName('head')[0],
                done=false;
            script.onload=script.onreadystatechange = function(){
              if ( !done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') ) {
                done=true;
                success();
                script.onload = script.onreadystatechange = null;
                head.removeChild(script);
              }
            };
            head.appendChild(script);
          }
            getScript('http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js',function(){
                // YOUR CODE GOES HERE AND IS EXECUTED AFTER JQUERY LOADS
            });
        })();
    

    I would really combine jQuery and jQuery-UI into one file and use a url to it. If you REALLY wanted to load them separately, just chain the getScripts:

    getScript('http://myurltojquery.js',function(){
            getScript('http://myurltojqueryUI.js',function(){
                  //your tab code here
            })
    });
    
    0 讨论(0)
  • 2020-11-28 19:39

    Take a look jQuery.holdReady()

    "Holds or releases the execution of jQuery's ready event." (jQuery 1.6+)

    http://api.jquery.com/jQuery.holdReady/

    0 讨论(0)
  • 2020-11-28 19:40
    <!doctype html>
    <html>
        <head>
    
        </head>
        <body>
            <p>If you click on the "Hide" button, I will disappear.</p>
            <button id="hide" >Hide</button>
            <button id="show" >Show</button>
    
            <script type="text/javascript">
                function loadScript(url, callback) {
    
                    var script = document.createElement("script")
                    script.type = "text/javascript";
    
                    if (script.readyState) {  //IE
                        script.onreadystatechange = function() {
                            if (script.readyState == "loaded" ||
                                    script.readyState == "complete") {
                                script.onreadystatechange = null;
                                callback();
                            }
                        };
                    } else {  //Others
                        script.onload = function() {
                            callback();
                        };
                    }
    
                    script.src = url;
                    document.body.appendChild(script);
                }
                loadScript("http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js",
                        function() {
                            //YAHOO.namespace("mystuff");
                            $("#show").click(function() {
                                $("p").show();
                            });
                            $("#hide").click(function() {
                                $("p").hide();
                            });
    
                            //more...
                        });
            </script>
    
        </body>
    </html>
    
    0 讨论(0)
  • 2020-11-28 19:41

    Put jQuery and your jQuery dependent code at the end of your HTML file.

    Edit: A little more clear

    <html>
    <head></head>
    <body>
        <!-- Your normal content here -->
        <script type="text/javascript" src="http://path/to/jquery/jquery.min.js"></script>
        <script>//Put your jQuery code here</script>
    </body>
    </html>
    
    0 讨论(0)
提交回复
热议问题