シンプルで高速な Web サイトを作成しており、サイトをできる限り最適化しようとしています。ソーシャル メディアのボタンが Web サイトの速度を大幅に低下させていることに気付きました。Facebook Like ボタン、Twitter ボタン、Google+ ボタンを含めます。そこで、いくつかのテストを実行しました。
ソーシャル メディア ボタンのないWeb サイト、読み込み時間 0.24 秒:
ソーシャル メディア ボタンのあるWeb サイト、読み込み時間 1.38 秒:
これが私のコードです:
<div id="social">
<!-- FB -->
<div id="fb-root"></div>
<script>(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_EN/all.js#xfbml=1&status=0"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like" data-href="http://facebook.com/textsearcher" data-width="150" data-layout="button_count" data-show-faces="false" data-send="false"></div>
<!-- TWITTER -->
<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.textsearcher.com/" data-hashtags="TextSearcher">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
<!-- G+ -->
<div class="g-plusone" data-size="medium" data-href="http://www.textsearcher.com/"></div>
<script type="text/javascript"> (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })(); </script>
</div>
そのため、ウェブサイトの読み込み時間を遅くすることなく、これらのソーシャル ボタンを読み込む方法をいくつか試しました。
JavaScript による 1 秒の遅延後のボタンのロード:
setInterval(function(){
$("#social").html("<!-- FB --><div id="fb-root"></div>.....");
},1000);
これは役に立ちませんでした。ボタンが正しくロードされず、バグが発生していました。
ドキュメントの準備ができた後の読み込みボタン:
$(document).ready(function() {
$("#social").html("<!-- FB --><div id="fb-root"></div>.....");
});
これも役に立ちませんでした。ボタンは正常に読み込まれましたが、ウェブサイトの読み込み時間は依然として 1.00 秒を超えていました。
私はアイデアが不足しています。ウェブサイトの速度を落とさずにロードする方法はありますか?
PS。これらのテストでは、クロム用のページ読み込み時間プラグインを使用しました
解決:
CodeMonkey の回答に感謝し、ページ全体が読み込まれた後にソーシャル ボタンを読み込むことで、最終的にこの問題を解決しました。HTML/マークアップを少しきれいにするために、必要な JavaScript コード (ソーシャル メディア ボタン用) を別のファイルに移動しました。
JS (別のファイル social.js 内):
/* Facebook*/
(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_EN/all.js#xfbml=1&status=0"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));
/* Twitter */
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');
/* G+ */
(function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
HTML:
<script>
$(window).bind("load", function() {
$.getScript('js/social.js', function() {});
});
</script>
<!-- FB -->
<div id="fb-root"></div>
<div class="fb-like" data-href="http://facebook.com/textsearcher" data-width="150" data-layout="button_count" data-show-faces="false" data-send="false"></div>
<!-- TWITTER -->
<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.textsearcher.com/" data-hashtags="TextSearcher">Tweet</a>
<!-- G+ -->
<div class="g-plusone" data-size="medium" data-href="http://www.textsearcher.com/"></div>
したがって、この読み込みタイミングが再び正常になった後、0.24 秒: