从简单的登录页面单击到重量级的单页面应用程序时,我一直在尝试使用类似的方法来提高性能:
<link rel="prefetch" href="https://example.com" as="document" />
<link rel="prefetch" href="https://example.com/app.js" as="script" />
<link rel="prefetch" href="https://example.com/app.css" as="style" />
当我的目标网页位于子域上时,似乎没有明显的性能提升。说,https://subdomain.example.com
。
当我点击要访问的链接时https://example.com
,我仍然在Chrome的“网络”标签中看到app.js
并app.css
加载了很长的延迟:
这是禁用预取的相同资源:
总共花费的时间大致相同。
请求标有预取缓存的资产之一的标头:
一般:
Request URL: https://example.com/css/app.bffe365a.css
Request Method: GET
Status Code: 200 (from prefetch cache)
Remote Address: 13.226.219.19:443
Referrer Policy: no-referrer-when-downgrade
响应:
accept-ranges: bytes
cache-control: max-age=31536000
content-encoding: gzip
content-length: 39682
content-type: text/css
date: Mon, 06 Jan 2020 21:42:53 GMT
etag: "d6f5135674904979a2dfa9dab1d2c440"
last-modified: Mon, 06 Jan 2020 20:46:46 GMT
server: AmazonS3
status: 200
via: 1.1 example.cloudfront.net (CloudFront)
x-amz-cf-id: dO3yiCoPErExrE2BLYbUJaVye32FIJXXxMdI4neDGzGX9a6gcCDumg==
x-amz-cf-pop: LAX50-C1
x-amz-id-2: 1O0LmihxpHIywEaMQWX7G3FDAzxtH9tZq1T/jeVLMzifFSJSIIJSS6+175H61kKdAq6iEbwfs2I=
x-amz-request-id: AF35C178092B65D4
x-cache: Hit from cloudfront
请求:
DNT: 1
Referer: https://example.com/auth/join
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36
我的问题是:如果Chrome指示使用了预取缓存,那么为什么会有大量的内容下载时间?
Chrome似乎具有不同类型的缓存:预取缓存,磁盘缓存和内存缓存。磁盘缓存和内存缓存非常快(加载时间分别为5ms和0ms)。但是,有时300ms下载时间的预取缓存几乎没有用。我可以得到为什么会发生这种情况的技术解释吗?Chrome的错误吗?我使用的是Chrome 79.0.3945.117。