我有一个托管在 GitHub Pages 上的网站,它是完全静态的 HTML,加载速度相当快。我一直在尝试缩短 TTFB 时间(以及 FCP、LCP 和 Full Loaded)。
现在尝试专注于 TTFB,我做了几次尝试。
然后我尝试使用 Cloudflare 工作人员,想法很简单:
令人惊讶的是,我没有得到比 80 毫秒更好的结果,尽管我期望的 TTFB 比我的第 1 次试用(仅 DNS 模式)要少得多,但平均而言,TTFB 介于 100 毫秒和 150 毫秒之间;我正在测试 Worker 的 url (random-name.organization-name.workers.dev)。 我怀疑我的工作代码有问题,这是我迄今为止尝试过的(主要来自文档)
const url = "https://domain.extension"
async function gatherResponse(response) {
const { headers } = response
return await response.text()
}
async function handleRequest() {
const init = {
headers: {
"content-type": "text/html;charset=UTF-8",
},
cf: {
cacheTtl: 50000,
cacheEverything: true,
},
}
const response = await fetch(url, init)
const results = await gatherResponse(response)
return new Response(results, init)
}
addEventListener("fetch", event => {
return event.respondWith(handleRequest())
})
是否有办法缓存所有内容并让工作程序以比仅 DNS 选项更快的速度提供服务?我尝试升级我的 Cloudflare 计划,并且还聘请了一名付费员工,希望能够无可救药地节省更多毫秒。
答案 0 :(得分:2)
当涉及到您描述的基本缓存时,Worker 不会比 Cloudflare 的内置 HTTP 缓存选项提供任何好处。如果你已经设置页面规则指定“缓存所有内容”和“边缘缓存TTL 50000”,那么你写的Worker代码不会有任何额外的效果。当您有更复杂的逻辑而单独使用页面规则时,Worker 会很有用。
(实际上,您发布的特定代码实际上会使 TTFB 变得更糟,因为它在返回响应之前执行了 await response.text()
- 这迫使 Worker 在任何响应之前等待整个响应主体到达 Cloudflare响应被发送到客户端。通常,Workers 会在响应内容到达时将其流式传输。)
如果您发现您的站点在仅 DNS 模式下比在代理模式下更快,这很可能意味着您正在测量速度的位置(例如您的家庭互联网)与您的源服务器相近是 Cloudflare。这是不寻常的,但它可能发生。为了更真实地了解性能差异,您需要从世界各地的多个位置进行测量。注意因为GitHub本身已经使用了缓存CDN来服务Pages,你可能还是会发现平均性能差异不是很大。
答案 1 :(得分:0)
Github Pages 有一个 10 分钟/600 秒的缓存控制标头。这“有效”就足够了。如果您向客户使用“git push”来破坏您的网站,您网站上的缺陷会在 10 分钟内消失。
我将我的 github 页面与 Cloudflare infront 保持为
foosite.tk/* 浏览器缓存 TTL:8 天,缓存级别:缓存一切,边缘缓存 TTL:7 天
Github Pages raw 会导致你的浏览器总是做大量的
“几分钟后”“当你回来”到选项卡后,对所有资产的“304 未修改”请求。使用上面的设置可以让浏览器几乎永远缓存东西,让 CF 几乎永远缓存东西。您将不得不在 CF Dash 中使用“清除所有内容”以使您的 git push 到 github 显示在客户端站点上,并强制刷新客户端。
答案 2 :(得分:0)
我也在 TTFB 上工作,并且观察到 CF 在某些位置(在我的情况下是香港和台湾)增加了 TTFB。
我的 CF 门票 - https://vocus.cc/article/609f1dfdfd897800011cbfa2
从 CF 中了解到,如果您不在企业计划中,他们的路由可能不会 100% 进行地理优化(该帖子说来自印度的测试被发现路由到新加坡的 CF 服务器,然后返回印度)
我现在的措施是用页面规则“缓存所有东西”,虽然它仍然不能低于100毫秒(但只有DNS可以),它在峰值上减少了很多,很少看到超过400毫秒的TTFB缓存所有东西。< /p>