4

私は現在、Javascriptの読み込みの延期に関するこの記事を読んでいます: https ://developers.google.com/speed/docs/best-practices/payload#DeferLoadingJS

彼らはこのスクリプトを使用します:

<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);
 }

 // 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>

現在、「延期」したい4つの個別のJavascriptファイルがあります。

Googleのサンプルコードを使用してこれをどのように達成しますか?

ポインタをありがとう。

4

6 に答える 6

6

次のスクリプトが機能しています....htmlファイルの下のhtmlとjavascriptの下にコピーして貼り付けて楽しんでください

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
    <title>HTML Lazy Loading</title>
        <link href="/skins/Skin_1/style.css" rel="stylesheet" type="text/css" />

    <script type="text/javascript">
        function myGetTime() {
            var dd = new Date();
            var hh = dd.getHours();
            var mm = dd.getMinutes();
            var ss = dd.getSeconds();
            var ms = dd.getMilliseconds();
            return ("<br/>The time is now: " + hh + ":" + mm + ":" + ss + ":" + ms + "<br/>");
        }

    </script>
</head>
<body>



<div style="color:blue;margin-left:10px;margin-top:10px;" >
<script type="text/javascript">
document.write("Time before loading all scripts");
    document.write(myGetTime() +"<br/>");
</script>



<div style="color:blue;margin-left:10px;margin-top:10px;" >
<script type="text/javascript">

function downloadJSAtOnload() {


var element2 = document.createElement("script");
element2.src = "https://jqueryjs.googlecode.com/files/jquery-1.2.6.js";
document.body.appendChild(element2);




var element4 = document.createElement("script");
element4.src = "https://www.apparelnbags.com/jscripts/validation_forms.js";
document.body.appendChild(element4);

var element5 = document.createElement("script");
element5.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js";
document.body.appendChild(element5);


var element6 = document.createElement("script");
element6.src = "https://www.apparelnbags.com/jscripts/slideshow_header.js";
document.body.appendChild(element6);

var element6 = document.createElement("script");
element6.src = "https://www.apparelnbags.com/jscripts/slideshow_header.js";
document.body.appendChild(element6);

var element7 = document.createElement("script");
element7.src = "https://www.apparelnbags.com/jscripts/jquery.js";
document.body.appendChild(element7);

var element8 = document.createElement("script");
element8.src = "https://www.apparelnbags.com/jscripts/jquery.lazyload.js";
document.body.appendChild(element8);

var element9 = document.createElement("script");
element8.src = "http://www.apparelnbags.com/AnBTreeViewMenu/jsTreeMenu/jMenu.js";
document.body.appendChild(element9);


}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;

</script>
</div>


<div id="dvHeaderMiddle" style="position:absolute; top:400px; left:350px;">

</div>

<script type="text/javascript">
document.write("Time After loading all scripts");
    document.write(myGetTime() +"<br/>");
</script>

</body>
</html>

ようこそ親愛なるマイケルmcgurk以下はStackOverFlowの別の答えです。そしてそれもかなり便利です

ここにリンクの説明を入力してください

(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
        });
    })();

私は実際にjQueryとjQuery-UIを1つのファイルに結合し、それにURLを使用します。本当にそれらを別々にロードしたい場合は、getScriptsをチェーンするだけです。

getScript('http://myurltojquery.js',function(){
        getScript('http://myurltojqueryUI.js',function(){
              //your tab code here
        })
});

ハッピーコーディング:)

于 2013-09-18T15:06:07.200 に答える
2

このdownloadJSAtOnload()関数では、3つのスクリプトすべてをロードするだけです。最も簡単なコピー/貼り付け方法は次のとおりです。

// 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);
     element = document.createElement("script");
     element.src = "deferredfunctions2.js";
     document.body.appendChild(element);
     element = document.createElement("script");
     element.src = "deferredfunctions3.js";
     document.body.appendChild(element);
}

 // 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;

そして、ここに少しきれいな方法があります:

function loadScript(src) {
     var element = document.createElement("script");
     element.src = src;
     document.body.appendChild(element);
}


// Add a script element as a child of the body
function downloadJSAtOnload() {
    loadScript("script1.js");
    loadScript("script2.js");
    loadScript("script3.js");
}

 // 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;
于 2012-06-07T16:14:56.843 に答える
2

提供されたソリューションは機能しないと思います。

以下のようにスクリプトを追加しても、依存関係を壊すスクリプトの順序は尊重されません。

于 2013-09-13T10:18:46.403 に答える
2

これはうまくいくかもしれません!おそらくコードを短く書き直すことができます。幸運を!

<script type="text/javascript">
    var mobjs1 = "http://yoursite.com/js/mobile1.js";
    var mobjs2 = "http://yoursite.com/js/mobile2.js";
    var mobjs3 = "http://yoursite.com/js/mobile3.js";
    var mobjs4 = "http://yoursite.com/js/mobile4.js";

    var mobcss = "http://yoursite.com/css/mobile.css";
    var stylesheet = "stylesheet";

        function downloadJSAtOnload() {
            var css = document.createElement("link");
            var js1 = document.createElement("script");
            var js2 = document.createElement("script");
            var js3 = document.createElement("script");
            var js4 = document.createElement("script");

            css.href= mobcss;
            css.rel= stylesheet;
            js1.src = mobjs1;
            js2.src = mobjs2;
            js3.src = mobjs3;
            js4.src = mobjs4;
            document.body.appendChild(css);
            document.body.appendChild(js1);
            document.body.appendChild(js2);
            document.body.appendChild(js3);
            document.body.appendChild(js4);
        }
        // Browser Capability
        if (window.addEventListener)
            window.addEventListener("load", downloadJSAtOnload, false);
        else if (window.attachEvent)
            window.attachEvent("onload", downloadJSAtOnload);
        else window.onload = downloadJSAtOnload;
</script>
于 2013-12-12T22:05:49.783 に答える
1

ファイルパスを配列に入れて、それをループします

<script type="text/javascript">
        function downloadJSAtOnload() {
            var jsFiles = ['js/jquery.script1.js','js/jquery.script2.js','js/jquery.script3.js'];
            var fileAmount = jsFiles.length;
            for (var i = 0; i < fileAmount; i++) {
                var element = document.createElement("script");
                element.src = jsFiles[i];
                document.body.appendChild(element);
            }
        }
        if (window.addEventListener)
            window.addEventListener("load", downloadJSAtOnload, false);
        else if (window.attachEvent)
            window.attachEvent("onload", downloadJSAtOnload);
        else window.onload = downloadJSAtOnload;
    </script>
于 2014-08-01T14:53:50.013 に答える
0

さまざまなスクリプトで関数を呼び出すことができるように、関数にパラメーターを指定する必要があります。

 // Add a script element with the url as a child of the body
 function downloadJS(url) {
     var element = document.createElement("script");
     element.src = url;
     document.body.appendChild(element);
 }

 onload(function(){
     downloadJS("deferredfunctions.js");
     downloadJS("deferredfunctions2.js");
     downloadJS("deferredfunctions3.js");
 });
于 2012-06-07T16:19:00.257 に答える