Skip to content
⚠️ This article was written in 2020. Some content may be outdated.

Webフォント読み込み最適化戦略

日々の開発において、Web フォントの読み込み最適化戦略の利用頻度は高まっている。本記事ではその使い方、原理、最適化戦略を体系的に解説する。

クイックスタート ​

実際のプロジェクトでは、使い方はもう少し複雑になる:

javascript
const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    if (entry.entryType === 'largest-contentful-paint') {
      reportMetric('LCP', entry.startTime)
    }
    if (entry.entryType === 'first-input') {
      reportMetric('FID', entry.processingStart - entry.startTime)
    }
  }
})
observer.observe({ entryTypes: ['largest-contentful-paint', 'first-input'] })

この方法なら、コードのテスト容易性と拡張性の両方が高まる。

内部原理 ​

以下は全体のサンプルだ:

javascript
const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    if (entry.entryType === 'largest-contentful-paint') {
      reportMetric('LCP', entry.startTime)
    }
    if (entry.entryType === 'first-input') {
      reportMetric('FID', entry.processingStart - entry.startTime)
    }
  }
})
observer.observe({ entryTypes: ['largest-contentful-paint', 'first-input'] })

境界条件の処理に注意すること。これは本番環境では極めて重要だ。

ビジネス実践 ​

肝心なのはコアとなるロジックを理解することだ:

javascript
const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    if (entry.entryType === 'largest-contentful-paint') {
      reportMetric('LCP', entry.startTime)
    }
    if (entry.entryType === 'first-input') {
      reportMetric('FID', entry.processingStart - entry.startTime)
    }
  }
})
observer.observe({ entryTypes: ['largest-contentful-paint', 'first-input'] })

パフォーマンス最適化は具体的な状況に合わせる必要があり、すべてのケースで過度な最適化が必要なわけではない。

パフォーマンス比較 ​

次の方法で改善できる:

javascript
const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    if (entry.entryType === 'largest-contentful-paint') {
      reportMetric('LCP', entry.startTime)
    }
    if (entry.entryType === 'first-input') {
      reportMetric('FID', entry.processingStart - entry.startTime)
    }
  }
})
observer.observe({ entryTypes: ['largest-contentful-paint', 'first-input'] })

このアプローチは本番環境で半年以上安定して動いており、実際に検証済みだ。

まとめ ​

  • コミュニティの動向を追い、技術的なアプローチは継続的に磨き込む
  • 新しい技術のために新しい技術を使ってはいけない
  • コード例はあくまで参考で、業務の場面に合わせて調整すること
  • Web フォントの読み込み最適化戦略は銀の弾丸ではなく、プロジェクトの規模や技術スタックに応じて選ぶ必要がある
  • API を丸暗記するよりも、その背後にある原理を理解する方が重要だ

MIT Licensed