使用@ font-face会减慢加载时间。我可以强制客户端缓存字体吗?

时间:2009-06-24 03:53:46

标签: css font-face

更新 看起来头信息请求信息是罪魁祸首。如何更改请求标头的max-age属性? TIA。


嗨,我在网站上使用@ font-face,我遇到文本加载延迟(可能是因为每页都加载了字体)。我知道客户端必须下载一次字体才能正常显示,但是每一页都显示?

有没有办法可以强制浏览器缓存该文件?或者是否有另一种方法可以加快字体的加载时间? (这个问题更适合在Server Fault上发帖吗?)

提前致谢。最糟糕的情况是,我会忍受延迟,所以我不需要任何“脱掉@ font-face”答案......;)

其他信息:

  • 我在Mac和Windows(XP和7)上都在Safari(4)和Firefox(3.5RC1)中进行了测试
  • 我测试的所有浏览器目前都设置为允许缓存(默认情况下已启用)
  • 网址 动态,只是“/fonts/font.otf”
  • 字体网址正确,因为网页加载字体并正确显示,虽然比正常情况慢但
  • 请求标题:

    缓存控制:最大年龄= 0
    If-Modified-Since:Wed,24 Jun 2009 03:46:28 GMT
    如果 - 无 - 匹配:W / “484d9f2-a5ac-46d10ff2ebcc0”
    引用者:http://testurl.com/
    用户代理:Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10_6; en-us)AppleWebKit / 530.13(KHTML,类似Gecko)版本/ 4.0 Safari / 530.15

  • 回复标题:

    连接:保持活动
    日期:2009年6月25日星期四02:21:31 GMT
    ETAG: “484d9f2-a5ac-46d10ff2ebcc0”
    保持活跃:超时= 10,最大= 29
    服务器:Apache / 2.2.11(Unix)mod_ssl / 2.2.11 OpenSSL / 0.9.8i DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635

2 个答案:

答案 0 :(得分:4)

你永远不能强迫浏览器缓存某些内容,只能鼓励它。我可以想到没有理由为什么带有正确的expires头的字体文件不会被缓存,这将我们带到:

  • 这是一个浏览器错误(你不说哪个浏览器)
  • 您的缓存控制标头丢失或错误
  • 您的浏览器配置为不缓存任何内容(图像缓存吗?)
  • 您的字体网址是动态的,因此浏览器认为每个请求都是针对不同的资源
  • 实际上缺少字体外观文件或网址拼写错误。
  • 延迟不是由字体下载引起的(你确实说你推测这是问题)

我认为有更多的信息是有序的。

编辑:设置缓存控制是服务器和语言特定的事情。有关Apache中缓存的信息,请查看mod_expires

答案 1 :(得分:2)

您确定您的字体文件是可缓存的吗?就像其他静态内容一样,它们应该具有远期到期日期,并且应该配置它们的标题以允许它们被缓存。如果要在服务器场中托管字体,则需要确保在服务器场中的所有服务器上规范化etag标头...否则后续的字体请求可能会强制从备用服务器重新下载字体即使已经从另一台服务器下载了相同的数据。