【问题标题】:How to cache fonts in NextJs?如何在 NextJs 中缓存字体?
【发布时间】:2019-07-30 12:46:27
【问题描述】:

我尝试向用户显示两种字体,但没有 FOIT,而我有一个 FOUT,我希望用户不要在每次重新访问页面时重新下载字体。

我添加了字体观察器来添加额外的 FOUT 后备功能。 _document.js

  componentWillMount() {
    if (process.browser) {
      const html = document.documentElement;
      html.classList.add('fonts-loading');
      const fontPoppins = new FontFaceObserver('Poppins');
      fontPoppins.load(null, 5000).then(() => {
        console.log('Poppins font has loaded.');
        html.classList.remove('fonts-loading');
        html.classList.add('fonts-loaded');
      }).catch(() => {
        html.classList.remove('fonts-loading');
        html.classList.add('fonts-failed');
      });
      const fontAvenir = new FontFaceObserver('Avenir');
      fontAvenir.load(null, 5000).then(() => {
        console.log('Avenir font has loaded.');
      }).catch(() => {
        html.classList.remove('fonts-loading');
        html.classList.add('fonts-failed');
      });
    }
  }
... (more code here)

render ( code here ) ...

// Additional FOUT?
        <Head>
          <link
            href="https://fonts.googleapis.com/css?family=Poppins:200,300,400,600,700,800,900&display=swap"
            rel="preload"
            as="font"
          />
           ... (more code here)
        </Head>

styles.css

html {
  font-family: sans-serif;
  -webkit-font-smoothing: antialiased;
}

.fonts-loaded html {
  font-family: Avenir, sans-serif;
}


@font-face {
  font-family: Avenir;
  src: url('/static/fonts/Avenir.ttc');
  font-display: swap;
  font-style: normal;
}

@font-face {
  font-family: Poppins;
  src: url('/static/fonts/Poppins-Regular.ttf');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

【问题讨论】:

    标签: javascript reactjs caching next.js


    【解决方案1】:

    使用 next.js 自定义服务器,您可以为每个文件设置缓存控制。

    https://github.com/zeit/next.js/#custom-server-and-routing

    const parsedUrl = parse(req.url, true)
    const { pathname, query } = parsedUrl
    
    if(pathname === '/static/fonts/Avenir.ttc' || pathname === '/static/fonts/Poppins-Regular.ttf') {
        res.setHeader('Cache-Control', 'public,max-age=31536000');
    }
    

    对于 Google 字体,它的外观已经设置为缓存控制。

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 2021-09-27
      • 2020-12-06
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 2021-04-05
      • 1970-01-01
      相关资源
      最近更新 更多