[解決済み] Webフォントかローカルに読み込まれるフォントか?
質問
を使用したことによるトラブル以来 Cufon を使用して以来、外部フォント リソースの使用から遠ざかっていましたが、最近になって、より良い方法がないかと、フォントの読み込みの代替方法を探しています。
世の中にはたくさんの新しい方法があり、それぞれの方法にバリエーションがあるようです。 typekit それとも グーグルウェブフォント (jsまたはcssで)ローカルに読み込むフォント(例えばfontsquirrel.com生成メソッド)を使い続けるべきでしょうか?
以下に、最も評判の良さそうな方法を、いくつかのテストとともにリストアップしますが、本当にウェブフォントに移行する価値があるのでしょうか。より高いリソース負荷 (http 要求) を運び、ファイル形式の種類が少ない (互換性が低い) などのように思われます。しかし、ほとんどの場合、ファイルは非同期で効率的に読み込まれるように見えます。
- 状況や必要性の問題なのでしょうか。もしそうなら、それらは何でしょうか?
- これらの方法の間には、劇的な違いがあるのでしょうか?
- 私がリストアップしていない、より良い方法がありますか?
- パフォーマンスの長所/短所は何ですか?また、依存性、互換性は?
パフォーマンスは大きな問題ですが、スケーラビリティと使いやすさも同じです。言うまでもなく、ルック&フィールです。
Google CSS
- は外部スタイルシートのみを使用します。
- 最も小さい互換性のあるファイルタイプのみを使用する
-
を使用することができます。
@import
または<link>
またはスタイルシーの内容を取る (@font-face
) を直接自分のスタイルシートに入れることもできます。
テスト結果
78ms load of html 36ms load of css
Google JSメソッド
-
用途
webfont.js
を使用してスタイルシートをロードします。 - 最も小さい互換性のあるファイルタイプのみを使用
-
を追加します。
:root
要素にクラス - はheadにスクリプトを追加します。
テスト結果
171ms load of html 176ms load of js 32ms load of css
Typekitのメソッド
-
を追加します。
:root
要素にクラスを追加します。 -
が使えるのは
*.js
スニペットまたは外部で読み込んだファイル*.js
ファイル -
は
data:font/opentype
を使用します。 - はheadにスクリプトを追加します。
- 埋め込みCSSをheadに追加します。
-
は外部スタイルシートをheadに追加します。
typekit.com のフォントとターゲットセレクタを簡単に追加、削除、調整できます。
テスト結果
169ms load of html 213ms load of js 31ms load of css 3ms load of data:font/
...& フォント・リス・メソッド
@font-face{
font-weight:400;
font-style:normal;
font-family:open_sanslight;
src:url(../font/opensans-light-webfont.eot);
src:url(../font/opensans-light-webfont.eot?#iefix) format(embedded-opentype),
url(../font/opensans-light-webfont.woff) format(woff),
url(../font/opensans-light-webfont.ttf) format(truetype),
url(../font/opensans-light-webfont.svg#open_sanslight) format(svg)
}
...またはdata:fontメソッドで...
@font-face {
font-family: 'open_sanslight';
src: url('opensans-light-webfont-f.eot');
}
@font-face {
font-family: 'open_sanslight';
src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAF4sABMAAAAArXQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcZLn0KkqwK44Jq866WBSpzpsNY2IyGAhoJFBbYjuxmyns5sNa4NwldcJ7eh3Uy5gQkURIlqWzONe3HcLsDX1x/+jifDXvbzgTBjopZElndil3hJkERJkmRJkVRJk3TJkEzJkmzOc4HLXOEOF7nEX/*thisisnotafullencodingjustanexample*/bZwUnK4yS3JlTx2Sr4USKEUSbHVX9fcGNBs4fqgw+GoNHU7lKr36Eqn0lCWt6pHFpWaUlc6lS6loSxRlirLlP/uuU01dVfT7L6gPxyqraluCpgj3WtqeC1V4VBDW2N4K1r1esw/IupKp9L1FwlqnuIAAAB42j3NvQ7BUBjG8R5tTz/0u2UjNTTESYQbMGmXLiISbeI6zBYjbuWtye7CeMJxtuf3LP8ne1+IXbWa7G3TMXZru4qLZkJRW1O2wzi3I+Li2Gik5yXpYkNGXj70YU98YQLGHxwwXxIWwO8SNmAdJBzAXku4gFNI9AF38QMjTwZ9vN6yJzq9OoEB6I8VQzDYK0ZguFKMwWiumIDxTDEFk6liBqaF4gDMFFvKxAfOxFUGAAABUxSL9gAA) format('woff'),
url('opensans-light-webfont-f.ttf') format('truetype'),
url('opensans-light-webfont-f.svg#open_sanslight') format('svg');
font-weight: normal;
font-style: normal;
}
どのように解決するのですか?
まず、Googleの提供するサービスについて整理しておきます。実際には、ブラウザが処理できる最小の形式が読み込まれます。WOFF は小さなファイル サイズを提供し、ブラウザはそれをサポートしているので、表示されるのは WOFF になります。また、WOFFはかなり広くサポートされています。しかし、たとえばOperaでは、おそらくフォントのTrueTypeバージョンが表示されるでしょう。
ファイル サイズのロジックは、Font Squirrel がこの順序で試行する理由でもあると思います。しかし、これは私の側からの憶測にすぎません。
すべてのリクエストとバイトが重要である環境で作業している場合、ユースケースに最適な方法を見つけるために、いくつかのプロファイリングを行う必要があります。ユーザーは 1 ページしか閲覧せず、2 度目は訪問しないのでしょうか? そうであれば、キャッシュのルールはそれほど重要ではありません。閲覧や再訪問がある場合は、Googleの方があなたのサーバーよりも優れたキャッシングルールを持っている可能性があります。問題なのはレイテンシーか、それとも帯域幅か?レイテンシーが問題なら、より少ないリクエストを目指し、できるだけローカルでホスティングし、ファイルを結合します。帯域幅の問題であれば、最小のコードと最小のフォントフォーマットとなるオプションを選択します。
さて、CSSとJSの比較についてです。次のようなHTMLの部分を見てみましょう。
<head>
<script type="text/javascript" src="script1.js"></script>
<link rel="stylesheet" type="text/css" href="style1.css" />
<style type="text/css">
@import url(style2.css);
</style>
<script type="text/javascript">
(function() {
var wf = document.createElement('script');
wf.src = 'script2.js';
wf.type = 'text/javascript';
wf.async = 'true';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(wf, s);
})();
</script>
</head>
多くの場合
script1
,
style1
そして
style2
はブロックされます。これは、リソースが読み込まれるまで、ブラウザがドキュメントを表示し続けることができないことを意味します(最近のブラウザはこれを少しごまかしていますが)。これは、特にスタイルシートでは、実際に良いことです。それは、スタイルのないコンテンツのフラッシュを防ぎ、また、スタイルを適用するときに発生する巨大なシフトを防ぎます (そして、シフトするコンテンツはユーザーとして本当に迷惑なものです)。
一方
script2
はブロックされないでしょう。それは後で読み込むことができ、ブラウザはドキュメントの残りの部分の解析と表示に移ることができます。そのため、これも有益な場合があります。
特にフォントについて話すと(さらに言えば、Google が提供しているもの)、私はおそらく CSS メソッドにこだわるでしょう(私は
@import
が好きですが、それは私だけかもしれません)。スクリプトによって読み込まれる JS ファイル (
http://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js
) よりも大きな
@font-face
宣言よりも大きく、ちょうど
に見える
はもっとたくさんの作業のように見えます。実際のフォント自体(WOFFやTTF)の読み込みはブロックされないと思うので、それほど物事を遅らせることはないはずです。私は個人的にCDNの大ファンではありませんが、CDNは本当に速いという事実があります。Google のサーバーは、ほとんどの共有ホスティング プランよりも圧倒的に速く、そのフォントはとても人気があるので、すでにキャッシュされている可能性さえあります。
そして、これが私の持っているすべてです。
私は Typekit の経験がないので、私の理論化からは除外しました。もし不正確な点があれば、議論のためのブラウザ間の一般化も含め、ご指摘ください。
関連
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法
-
[解決済み] jQueryのバージョン1、バージョン2、バージョン3の違いは何ですか?[クローズド]
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)