7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SNSのタイムラインを埋め込みつつ、Lighthouseのスコアを上げる

Last updated at Posted at 2019-08-15

Lighthouseとは

GoogleがOSSとして開発している、ウェブサイト (ウェブアプリ) の品質チェックツールです。

Chromeの拡張機能としてインストールすることができ、ウェブサイトの表示速度やHTMLの構造チェック、JSのライブラリのバージョンによる脆弱性の有無などを教えてくれます。

SNSを埋め込んだ時の問題点

ウェブサイトを作ると、TwitterやInstagramのタイムラインを埋め込みたくなる時があります。

こういうやつです。(左がTwitter、右がInstagram)

image.png

Twitterの場合はこういうコードを記述するように、という指示です。

<a class="twitter-timeline" href="https://twitter.com/hinatan_net?ref_src=twsrc%5Etfw">Tweets by hinatan_net</a>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

中の処理としては、JavaScriptのロードが完了するとiframeが埋め込まれるようになります。

ところが、こういう処理を入れるとロードが重くなり、Lighthouseのスコアが下がります。

image.png

読み込んでいる画像ファイルが大きいだの色々文句を言われます。

対策

実際には他の場所の表示が十分早ければ体感速度には問題はないと思っています。
先ほどのLighthouseの結果のスクリーンショットでも、1コマ目からすでに正しくウェブサイトが表示されているので、訪問者がサイトのロードが遅いと感じることは無いでしょう。

ただ、他の遅い場所を調査したかったり、継続的なチェックをしたい場合にはこの原因を放置してスコアが低い状態になってしまうのは目障りです。

そこで、以下のようにJavaScritを埋め込み、タイムライン部分は別ファイルとして遅延読み込みするとOKです。

<script>
$(function(){
  setTimeout(function(){
    $("#timeline").load("/includes/timeline.html");
  }, 5000);
});
</script>

一緒に読み込ませるとスコアに影響するから遅延して読み込ませる、というだけの雑な対処療法ですが、これによってスコアがは上がり、他の本質的なチューニングに目を向けることができます。

image.png

私の場合、使ってないCSSの箇所が多いから減らせ、とか言われていますね。

実際の動作はサイトをみてもらえるとわかると思います。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?