簡體   English   中英

推遲加載Facebook Like Button Script

[英]Defer loading of Facebook Like Button Script

Google pagespeed正在抱怨我的facebook就像按鈕腳本一樣。 我怎樣才能推遲腳本?

在初始頁面加載期間解析45KiB的JavaScript。 推遲解析JavaScript以減少頁面呈現的阻塞。 http ://static.ak.facebook.com/.../xd_arbiter.php?...(內聯JavaScript的21KiB) https://s-static.ak.facebook.com/.../xd_arbiter.php ?...(內聯JavaScript的21KiB) http://www.facebook.com/.../like.php ?...(內聯JavaScript的3KiB)

這是我正在使用的代碼,我將它加載到頁面頁腳的.js文件中。

(function(d,s,id){
        var js,fjs = d.getElementsByTagName(s)[0];
        if(d.getElementById(id)){return;}
        js=d.createElement(s);
        js.id=id;
        js.async=true;
        js.defer=true;//THIS DOES NOT APPEAR TO SATISFY PAGESPEED
        js.src="//connect.facebook.net/en_US/all.js#xfbml=1";
        fjs.parentNode.insertBefore(js,fjs);
    }
    (document, "script", "facebook-jssdk")
);

結果在以下腳本標記中(通過Chrome的檢查器):

    <script 
    id="facebook-jssdk" 
    async="" 
    defer="" 
    src="//connect.facebook.net/en_US/all.js#xfbml=1"></script>

使用setTimeout luke!

setTimeout( function () {
   (function(d,s,id){
         // load js
         ...
      }
      (document, "script", "facebook-jssdk")
   );
}, 3000);

您可以將負載放在另一個“線程”中以異步或延遲它

setTimeout工作但它不是真正的延遲,因為如果頁面在設置的時間之后完成加載(在這種情況下為3秒),則在頁面加載完成之前將加載like按鈕。

我把like按鈕的javscript代碼放在我自己的函數中並嵌入到它里面

<script>
    function FbButtonLoad(){
      (function(d,s,id){
         // load js
         ...
      }
      (document, "script", "facebook-jssdk")
   );
}
</script>

然后我在body標簽中設置它以在頁面加載時運行:

<body onload="FbButtonLoad();">

該按鈕出現在我離開容器的頁面上:

<div id="fb-root"></div>
<div class="fb-like" data-send="true" data-width="350" data-show-faces="true"></div>

另一個稍微不完美的解決方案(僅限HTML5)將在DOMContentLoaded上加載庫。

document.addEventListener('DOMContentLoaded', function() {
    (function(d,s,id){
        var js,fjs = d.getElementsByTagName(s)[0];
        if(d.getElementById(id)){return;}
        js=d.createElement(s);
        js.id=id;
        js.src="//connect.facebook.net/en_US/all.js#xfbml=1";
        fjs.parentNode.insertBefore(js,fjs);
    }
    (document, "script", "facebook-jssdk")
);  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM