Blog

美しいWebフォントをストレスなく見てもらうための3つの設定

前回までで Web フォントで表示できるようになったのですが、ブログの表示速度になるべく影響を出したくないので色々といじっていたら画面が乱れまくって、一瞬焦った @azur256 です。

最終回の今日は、Web フォントを導入してもブログの表示速度にできるだけ影響を出さないようにする方法について書きたいと思います。

  1. Webフォントが良さそうだったので色々調べてみたら、イイ感じです
  2. 自分のブログでWebフォントを使えるように設定してみる
  3. 美しいWebフォントをストレスなく見てもらうための3つの設定



WebFont 002 03

Web フォントを使うと表示が遅くなる?

Web フォントは大きいファイルになるので、そのデータが転送するまでは適用されません。フォントが適用されないということは、それまでの間はブログが表示されないということになります。

先日も書きましたが、今回使った Web フォント Rounded M+ の場合、サイズが 1.5MB 〜 3.2MBにもなります。

rounded-mplus-1c-medium.ttf3198380
rounded-mplus-1c-medium.ttf.gz1536334
rounded-mplus-1c-medium.woff1528824
rounded-mplus-1c-medium.woff.gz1528825


これだけのデータを落とすのにどのくらいかかるのでしょうか。通信環境にもよりますが 1MB で数秒程度はかかります。それだけの時間、画面に文字が表示されないのはちょっと困りますし、そもそも 3.2MB のデータはもっと小さくしたいものです。

ということで、今回は Web フォントを使いつつ、読者の方の負担を少しでも減らすために次の 3 つの対策をやってみたいと思います。
  1. できるだけ小さいファイルを使えるようにする
  2. フォントファイルをキャッシュする(してもらう)
  3. Web フォントのロードを遅らせる

できるだけ小さいファイルを使えるようにする


フォントファイルは利用するブラウザの環境によって使われる形式が変わります。最新のフォーマットである WOFF 形式の場合は 1.5MB ですが、互換性が最も高い TTF ファイルは 3.2MB もあります。
そこで TTF 形式の場合は、圧縮ファイルも事前に準備することにしました。WOFF 形式の場合は、圧縮効果が無いので圧縮ファイルは使わないことにします。

WOFF が使えれば WOFF を、WOFF が使えない環境で圧縮転送ができるなら TTF の gz 圧縮を、それでもダメなら TTF 形式を使うことにします。

すでに前回まででこれらのファイルを Web サーバに設定しています WOFF 形式を使うか TTF 形式を使うかも設定済みなので、今回は TTF の gz 圧縮ファイルを送るための設定をします。

設定は .htaccess ファイルに記述します。



Apache の Mod Rewrite という機能を使って、gzip を使えて、gz ファイルが存在していた時にだけ gz圧縮ファイルを返却するようにして、かつ、ttf.gz という名前のファイルが返却された時に、そのファイルが font/truetype という種類だという設定をする、という内容になっています。
これで、圧縮された TTF 形式を送り出すことができるようになりました。

本当に圧縮ファイルが渡ってきているかを調べるのは少し難しいのですが、 WireShark というツールを使ってネットワークの状態を確認すると見ることができます。

WebFont 015

ここでは詳細は割愛しますが、データを見ると圧縮されていることが分かります。 Content-Encoding: gzip となっています。



これで TTF しか読めない環境でも若干は速度が改善されると思います。

フォントファイルをキャッシュする(してもらう)


ブラウザには自動で色々なファイルをキャッシュする仕組みがあります。Web フォントファイルも自動でキャッシュされるのですが、そのファイルが変更されていないかを Web サーバに確認しています。変更されていたら、改めてダウンロードするような仕組みなのです。
しかし、このようなフォントファイルはめったなことでは変更しないファイルです。変更しないと分かっているなら、Web サーバに確認にいかないようにした方がもっと速くなります。

Web サーバの設定でキャッシュの有効期限を設定することで、ブラウザはその有効期限のうちは Web サーバに確認しなくなります。これも .htaccess に設定します。



otfやttf、eot、woffという拡張子の場合、キャッシュを 2592000 秒間(30日間)の間、Web サーバに確認しない、という設定です。数字の前についている “A” は、ブラウザが最後にアクセスしてからの時間、という意味になります。

詳細を Google Chrome のデベロッパーツールを使ってみてみます。Chrome のメニュー「表示」→「開発/管理」→「デベロッパーツール」で表示します。ネットワークの状態を見るので「Network」を選びます。
デベロッパーツールを表示した状態で、自分のブログにアクセスするとブラウザとブログの間のデータのやり取りを見ることができます。色々なファイルの情報が出てくるので、フィルタでフォントファイル名を設定すると簡単に見ることができます。

これがキャッシュがない状態の通信です。1.5MB のデータを落としてきています。この環境ではダウンロードに 3 秒掛かっています。
WebFont 014

こちらがブラウザのキャッシュにファイルが存在していて、ブラウザが Web サーバに変更されているかを確認に行っている状態です。Web サーバからキャッシュファイルは最新なのでキャッシュを使うように、というレスポンス (Status 304) が返却されています。
WebFont 012

通信状態が悪い環境で取った情報なので、この確認だけでも 1 秒も掛かっています。しかし、このような環境で通信することもあると思うので、この最新確認さえも出さない方が望ましいです。

そこで、先ほどの設定をしてからの状態を確認してみます。ブラウザから最新確認の要求が出ていないので、何も表示されません。これで大分良くなるはずです。
WebFont 013

今回はフォントファイルのみの話をしていますが、画像なども同じように設定することで表示性能は格段に向上しますので、一緒に設定されることをお勧めします。

Web フォントのロードを遅らせる


Web フォントを設定するとフォントがロードされるまで、その文字が表示されません。今までの設定でできるだけ速くロードされるようにはしてきましたが、初めて訪問していただいた方々は Web フォントがダウンロードされるまでは文字が表示されなくなってしまいます。

そうするとこんなイメージになってしまいます。
WebFont 016

記事タイトルに Web フォントを設定しているので、これが表示されないのは辛いです。そこで、 Web フォントのロードを遅らせて、Web フォントがロードされるまでは標準のフォントで表示するように設定します。Web フォントがロードされるまではこういう表示になります。
WebFont 017

そして、Web フォントのロードが終わると、Web フォントが適用されてこのような表示になります。
WebFont 018

遅延ロードには色々なやり方があるようなのですが、なかなか上手く行かなかったので、今回は スタイルシート設定を遅らせる方法でやりました。
具体的には CSS ファイルに設定していた font-face の設定を外出しにして、そのファイルが スタイルシートファイルだということを遅らせて設定することで、設定されたタイミングまで Web フォントの適用を遅らせます。

まず CSS ファイルに設定していた font-face の設定だけを独立した別ファイルにします。今回は、このような内容を記入したファイルを /data/fonts.css というファイルを作ります。この時に元々のスタイルシートから指定を削除することを忘れないようにしてください。



このファイルをブログのヘッダ部分で link として読み込みます。この行を読み込んだ時点では、まだスタイルシートとしては判定されていない状態になります。この時に id を指定しておきます。


フッタ部分で先ほどの link をスタイルシートとして指定します。link で指定した id を使ってスタイルシートとして指定します。


これでフッタを読み込むまで Web フォントが適用されるのを遅らせることが出来ます。遅らせる幅を調整したい場合にはタイムアウトを使って延長する方法などもあります。

今回、一つ一つの技術としては知っていたものをまとめて使ったことにより色々と勉強になりました。Web フォントを使ってみようという軽い気持ちで始めたものの、今回もまたちょっと濃い内容になってしまいました。相変わらず分かりにくい説明で、すみません。

今回参考にした記事を載せておきますので、更に詳しく知りたい方は参照してみてください。





最後まで読んでいただきありがとうございます。

follow us in feedly 左のアイコンをクリックして、このブログを Feedly に登録していただけると嬉しいです


Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします

RSSリーダへの登録は こちら からどうぞ。

URL
TBURL

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

フェイスブックでのコメント

Return Top