Google Fontsの外部ファイルを少しでも速く表示させる方法 結城永人 -2022年2月21日 Google Fontsで日本語のWebフォント(Japanese)が幾つも無料で提供されていて現在は正式版として相当に使い易くなっている。 Google Fontsの日本語フォント 種類が非常に多くて五十二件(2022年2月時点)から二十件のみ掲載する。 Noto Sans Japanese(適用)Noto Serif Japanese(適用)Shizuru(適用)M PLUS Rounded 1c(適用)Zen Kaku Gothic Antique(適用)Sawarabi Mincho(適用)Kosugi Maru(適用)Kaisei Decol(適用)Shippori Mincho(適用)Delta Gothic One(適用)Reggae One(適用)Kiwi Maru(適用)Murecho(適用)Yusei Magic(適用)Yuji Syuku(適用)Hachi Maru Pop(適用)Potta One(適用)Hina Mincho(適用)Otomanopee One(適用)New Tegomin(適用) ※フォント名のリンクの右横の「適用」を押すと本稿のフォントを入れ換えて表示する(読み込みに多少とも時間がかかる)。 ※全ての内容が揃ってないフォントは部分的に元のフォントが使われる。 Google Fontsを外部ファイルで読み込むとすると日本語は漢字が多いためにどうしても時間がかかってしまう。 近年、Webフォントが読み込まれてサイトで使えるまで通常のフォントが出るようになったから以前みたいに文字のない画面で始まるのを避けられるにせよ、入れ替わるときのカク付きはあり得るし、なるべく速く読み込んでその他のパフォーマンスも下げることが少ないように使いたい。 目次先読みのrel-preloadを適用するGoogle Fontsの先読みのソースコードJavaScriptなしで普通に読み込むJavaScriptなしでも先読みするNoto Sans Japaneseを使ったサンプル 先読みのrel-preloadを適用する 表示速度に関してはHTMLのリソースヒントの一つで、外部ファイルを先読みで取得するrel-preloadを使うのが最速みたいだ。 そしてWebフォントの外部ファイルで問題になるパフォーマンスの低下も相当に低く抑えられる。 例えばGoogle Fontsを普通に使ってサイトのパフォーマンスを計測するPageSpeed Insightsにかけると幾つかの警告が出て来てしまう。 最も厳しいのが「レンダリングを妨げるリソースの除外」で、Webフォントの読み込みが後ろのコンテンツの表示を止めてしまってそれだけ表示速度を含めたパフォーマンスを低下させる。 しかしrel-preloadを適用すると外部ファイルの読み込みが非同期になるからブラウザはWebフォントが使えるまでその場で待たずに後ろのコンテンツを直ちに扱うことができる。 レンダリングを妨げるリソースの除外|PageSpeed Insights|Google Developers PageSpeed Insightsの「レンダリングを妨げるリソースの除外」の警告は出なくなる。 Google Fontsの先読みのソースコード <link rel="preload" href="Webフォントの外部ファイルのURL" as="style" onload="this.removeAttribute('onload');this.removeAttribute('as');this.rel='stylesheet';"> どんなWebフォントでも帯文字の部分だけ変更して使うことができる。 linkタグのas属性の値はWebフォントの外部ファイルの先読みには「font」を使わなくてはならない。しかしGoogle Fontsで提供されるWebフォントのソースコードの外部ファイルのURLはその先の実際に使われるWebフォントのタイプの振り分け用になっている。なのでas属性の値は「style」を入力することになる。 先読みのソースコードはサイトの適切な場所ならばどこに置いても構わないけれどもなるべく上の方に置いた方がそれだけ速く展開できる。 head内の先頭に近いところがパフォーマンスを保つには最適な場所になる。 ソースコードの内容としてWebフォントの外部ファイルを読み込んだらデザインのCSSとして読み込むという一連の流れがあり、それはJavaScriptで行われているので、もしもブラウザがJavaScriptを使用しない設定担っていると止まってしまう。 JavaScriptなしで通常のフォントを使う場合は上記のソースコードだけで他に何もする必要はない。 BloggerなどのXMLのマークアップが必要なサイトはそのままではエラーになるからソースコードを修正しなくてはならない。 JavaScriptなしで普通に読み込む <noscript> Webフォントの元のソースコード </noscript> 使用したいWebフォントの元のソースコード、外部ファイルのURLを指定するlinkタグをJavaScriptなしで表示するnoscriptタグで囲って追加しておく。 これは「レンダリングを妨げるリソースの除外」の警告の対象になるので、後のコンテンツの表示を止めないためにはbody内の下の方に置くべきだけど、するとWebフォントの表示速度自体は最も遅くなるからバランスを取るならばhead内の下の方に上げても良いかも知れない。 JavaScriptなしでも先読みする 先読みのlinkタグ <link rel="preload" href="Webフォントの外部ファイルのURL" as="style"> Webフォントのlinkタグ Webフォントの元のソースコード パフォーマンスを低下させないためにはWebフォントの元のソースコードを全てのコンテンツの終わりに置かなくてはならない。つまりbodyの終了タグ(</body>)に近いところに記載する。 するとWebフォントの表示は後回しになるので、優先したければもっと上のhead内の下などもバランスを取り易い。 先読みのrel-preloadのlinkタグは全てのコンテンツ、メタ情報も含めれば全てのマークアップの始まりに置くのが最も効果的だ。headの開始タグ(<head>)に近いところに記載するべきだと思う。 先読みのソースコードはWebフォントの元のソースコードよりも前に置かないと効果的ではない。後に置いたら意味はないし、前でも遠く離すほどに先読みを終えて後の元のソースコードに辿り着いたときに速やかに開始できる。 これはJavaScriptを使ったソースコードと比べると場合によってパフォーマンスが低いかも知れない。Webフォントの読み込みが完了した時点で、即座に次のデザインの読み込みに移るかどうかは全てのサイトで同じとはかぎらないためだ。先読みと元の二つのソースコードを離して効果的に記載すればするほどに上手く行き難くなってしまいもする。ブラウザは上の作業が終わっても下の作業にまだ辿り着かず、二つの流れに開きが出て来て無駄を残す可能性がある。 Noto Sans Japaneseを使ったサンプル Noto Sans Japanese|Google Fonts|Google 実際にWebフォントの外部ファイルを先読みに変更するときはどうなるかをGoogle FontsのNoto Sans Japaneseを例として確認してみる。 元のソースコード <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap" rel="stylesheet"> 現在、三つのlinkタグが使われる。最初の二つはHTMLのリソースヒントのrel-preconnect(多めの事前接続)で表示速度を少し改善するためにあり、最後の一つがWebフォントの幾つかのタイプを振り分ける外部ファイルになる。 Google Fontsはその先にWebフォントの外部ファイルがあるので、直接、Webフォントの外部ファイルを読み込むわけではない(だからrel-preconnectのlinkタグが二つもあるんだろう)。 先読みのソースコード <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preload" href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap" as="style" onload="this.removeAttribute('onload');this.removeAttribute('as');this.rel='stylesheet';"> 三つのlinkタグの最初のものは最後のもののドメイン(https://fonts.googleapis.com)の事前接続だからそれが先読みになると吸収されて必要なくなる。 だから二番目のWebフォントの事前接続のものを残して最後のWebフォントの本体というか、そうしたデザインのCSSのためのものに先読みを適用する。 置き場所はどちらもサイトのソースコードの先頭付近に置くことが望ましい。 JavaScriptなしの場合に対応すれは所定のnoscriptタグを追加したり、Webフォントのソースコードを先読みと本体に分割して記載したりできる。 Google Fontsの外部ファイルの先読みのソースコードを紹介したけれどもその他のWebフォントの外部ファイルでも提供されるソースコードの内容が違うにせよ、linkタグのrel-preloadで外部ファイルを先読みすれば表示速度とパフォーマンスを大きく落とさないように使うことができる。 参考サイトGoogle PageSpeed - Eliminate Render-Blocking Resources Above the Fold caused from Google Fonts コメント 新しい投稿 前の投稿
イヤーワームという頭の中で音楽が勝手に流れる現象を引き起こすストレスを反省 以前から頭の中で音楽が勝手に流れることが良くあって近頃でもブログで取り上げたばかりの モーツァルトの幻想曲K.397 や K.375 や ribbonの Virgin Snow などを体験していた。いつも好きな曲ばかりで鼻歌を伴って喜ばしい気持ちになるし、好調の証のように捉えてい...
芦名星のたぶん本当の死因 芦名星は自殺した。その前後、 三浦春馬と竹内結子の自宅のクローゼットでの首吊りという同じ仕方での連続自殺 があり、他殺の陰謀論も思い浮かぶけど、しかし違うのではないか。今の 日本の芸能界には死にたくなる気持ち悪さがある し、芸能人が裕福な生活でも自殺することはさほど不思議ではない...
幸せの良さはインパクトが物凄く大きいために人々の印象にも残り易いと考える ブログのヘッダーの背景画像を変更した。無料素材の クリスティン・フォークトの写真 を使っている。 Pexelsで見付けるや否や本当に素晴らしく気に入ってしまった A woman in snowflakes by Kristin Vogt / Pexels 雪の中で紺...
アガサ・クリスティの誘拐された総理大臣の日本語訳 十九から二十世紀のイギリスの作家、小説家の アガサ・クリスティ の小説の 誘拐された総理大臣 (1923)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる。 ...
Imgurで画像URLと埋め込みコードを取得する方法 Imgur は自分でアップロードした画像については画像URL/直リンクを取得して他のサイトにHTMLのimgタグで表示させられる。 そして自分と他の人たちも含めて画像の埋め込みコードを取得して他のサイトのHTMLに、そのまま、記載して表示させられもする。 目次 Img...
俳句の規則:字数と季語と切れ字 概要 俳句の規則 俳句は、十七文字という短い詩の中で、季節を感じさせる言葉(季語)を使い、切れ字で語調を整えて表現する伝統的な日本の文学形式です。 句の基本的な構成要素 字数を十七文字に揃える:俳句は大きく三つの部分に分けられる。上句(かみく)と中句(なかく)...
日常の些細な出来事に触れる幸せの味わいは小さいというイメージが欠かせない 誰にでも分かる些細な日常というと他でもなく、小さな幸せの味わいではないか。 永遠の詩人として本質的な認識に基づく命の尊さを伝え届けなくてはならないと考えるけれどもアクセスアップのためには誰にでも分かる些細な日常のイメージも大事にするべきだろう。 小さな幸せの味わいをどこま...
シソンヌのラーメン屋:とんこつラーメンを臭いラーメンと呼んだコントが好き シソンヌ (お笑い)のラーメン屋のコントが面白かった。とんこつラーメンを臭いラーメンと呼ぶから僕も同じだったと気付いた。 シソンヌのラーメン屋 (Google検索) 否、店によってはそばを通りかかるだけでも堪らないくらい臭いから、一体、何だろうと本当に思わずにはいられなか...
今春に咲き出した桜の花の写真を幾つか撮って来た サイバーショットのW170を使った。七八年前のコンパクトカメラで、 一眼カメラのα5100を買って お役後免の状態に差しかかっているけど、どうするかと考えてしまわざるを得ない。画質としては力強い。画素数が10.1MPで、レンズがカールツァイスということで、写真の風合いが凄いと...
キム・テヒの反日活動を日本人としてどこまで許せるか かつて韓国ドラマの IRIS -アイリス- を観て何て綺麗で可愛くて良いんだと一目で度肝を抜かれた俳優に キム・テヒ がいた。 映画『アイリス -THE LAST-』予告編 by TAEWON ENTERTAINMENT from シネマトゥデイ 日本で放映されたのが2...
コメント