CloudflareのImage Resizingを使ってプレースホルダ画像として表示する

はじめに

Next.jsではpre-renderがデフォルトです。

pre-renderとは、server side renderingとclient side renderingの中間的な存在。(雑な説明です

みなさんはMediumってブログを見たことありますか?

Mediumの記事は画像がピンぼけして、すこしたってからきれいな画像に差し替わりますよね?あんな感じです。

解像度のあらーい画像(数バイト)をしゅっとダウンロードして、それをピンぼけ状態で表示します。

んで、裏ではOriginをダウンロードしていて、完了したときに差し替えるって仕組みです。

これを実現するためには、プレースホルダ用の画像とoriginの両方の画像が必要になります。

いちいち、両方の画像を用意するのは面倒ですよね?ね?

そこでCloudflareのImage Resizingです。

Image Resizing

ビジネスプラン以上にアップグレードして、ぽちっとするだけで利用可能になります。

f:id:murajun1978:20200610214144p:plain

実際に試してみましょう。

画像のURLがこんなだとします。

https://www.murajun1978.dev/images/profile_image.jpeg

f:id:murajun1978:20200610214504p:plain

小さくてみにくいですが、8.3kbの画像です。

これくらい小さいと気にはなりませんが、もっと解像度を下げて小さくしてみましょう。

URLはこんな感じになります。

https://www.murajun1978.dev/cdn-cgi/image/width=5,height=5,quality=5/images/profile_image.jpeg

f:id:murajun1978:20200610221312p:plain

画像は小さくて見えないですよね。。。

↑のオプションを設定しましたところ、875bまで小さくなりました。

ちなみにWebPにも対応してます。

詳しい使い方はこちらを参考にしてください。

まとめ

Reactのsuspenseとかを使うと簡単に実装できますよ。

pre-render時は、CSSのopacityを0.5とかに設定して、画像をぼかして表示します。

で、Origin画像のダウンロードが完了したら、Origin画像が表示されます。

ちょー楽勝ですね!

料金ですが、ビジネスプランは$200/月です。

ビジネスプランでImage Resizingを使う場合、10万リクエストまでは追加料金なしで利用できます。

10万リクエストを超えるたびに$10かかります。

ま、個人のサイトに$200/月はちょっとお高い気もしますが、Image Resizingだけではなく、その他の機能ももりもりついてきます。

前回紹介したWorkersでも利用できるますよ。

Cloudflareをフル活用して、いい感じに手を抜きたい人は、ビジネスプランにアップグレードしてみては?

Enjoy Cloudflare Image Resizing ヘ(^o^)ノ