slick.jsで画像のカルーセルをつくるとき、decoding属性があると表示されなかった話

原因の究明も深追いもしていないので、こういう事例があるのだなーぐらいで読んでいただけると幸いです。

先日、カラーミーショップの簡易パフォーマンス改善を承り、画像の属性抜けを1つ1つ修正していました。

言わずもがなですが、img要素にwidth、height指定がなければCore Web VitalでCLSの問題が出がちですし、ファーストビュー以外の画像にはloading=lazyを指定してあげた方が良いです。

そして、トップページには上部にSlick.jsを用いた画像スライダーが配置されており、一度に複数枚表示するタイプでしたのでdecoding=asyncを指定することにしました。

カルーセルが消えた…?

画像の指定がすべて終わって表示を確認すると、おや不思議。トップに表示されるはずのスライダーがありません。

開発者モードで確認してみると、img要素は存在するもののなぜかheight:0 になっています。

decoding指定をやめてみると、きちんと表示され事なきを得ました。

ということは、デコードされる前の状態でslickが動作したため、要素の無い状態でカルーセルを作ってしまった => height: 0 ということでしょうか。憶測でしかありませんが。

CSSによるheight指定があれば防げたかも

限られた予算と時間 & 自分はslick.jsを使うことがない(大体Swiper使う)、 ので深く追及する必要はないと判断しましたが、CSSで予めカルーセルアイテムのサイズを指定しておけば、decodingありでも問題なく表示できたんじゃないかと予想されます。

css1行でできる、slick.jsのパフォーマンス改善

以前書いたブログのご紹介ですが、slick.jsに関してはcssを1行書き加えるだけで大きくパフォーマンスを改善することができます。

ご興味がありましたらご参考になさってください。 

css一行でできるCLS改善(slick.jsの場合)
slick.jsを使用している場合にcss一行でできるCLS対策を解説します。CLSとはページ描画後に発生するレイアウトのガタつき度合いです。影響を受けた範囲×移動した%で算出されるので、ページ上部に使われやすいスライダーはCLSの値が大きくなる原因となりやすいです。

タイトルとURLをコピーしました