整个网站是否会自动缓存(谷歌使用<style>)?

3
我听说过样式表被缓存,但像我们正在浏览的这一页一样的常规页面也被缓存吗?我发现在Google最近制作的网站上,它们甚至不使用样式表,只是一个带有单个压缩CSS行的<style>标签。这让我认为整个页面(包括<style>)都被缓存,而不仅仅是样式表。我的理解正确吗?为什么Google不使用样式表并希望它们的CSS被缓存,当他们的网站每月被浏览数十亿次时?
根据我的理解,“Chrome检查元素”的“网络面板”中显示的所有内容都被缓存了。
我研究了“PHP缓存”,但那似乎是针对include的,所以我猜页面已经自动缓存了。

3
你需要学习HTTP缓存头。 - SLaks
请查看Nginx - Arthur Halma
2
谷歌已经远远超越了缓存文件的问题。如果你使用他们的浏览器和/或操作系统,他们甚至不会使用HTTP(他们可能会使用SPDY)。他们同时进行数百个A/B测试。为全球数十个服务提供已登录用户服务。对于我们中的任何人来说,这都是过度优化。不要试图模仿你在他们网站上看到的某个功能,可能有数十个因素导致他们使用它,而我们忽略了这些因素和多年的经验。Google Page Speed和YSlow!对于大多数项目来说已经足够好了。然后你可以阅读Steve Souders和其他人写的相关主题内容。 - FelipeAls
@FelipeAls 谢谢,我不会这样做的,我只是对他们网站上奇怪的技术感到好奇 :) - user1631995
2个回答

2

查看这篇文章:缓存教程

<head/> 部分中使用 <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 标签。 在 PHP 代码中使用头信息

<?php
 Header("Cache-Control: must-revalidate");
 $offset = 60 * 60 * 24 * 3;
 $ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
 Header($ExpStr);
?>

啊,我明白了。我在开发中总是使用no-cache。但为什么谷歌不在所有网站上都使用样式表呢? - user1631995
@ArthurHamla:你能总结一下那个链接中的重要内容吗? - Blender
谷歌使用类似Nginx服务器的东西来缓存整个页面。此外,他们还有CDN服务器等。您可以通过传递头信息(使用您的Web服务器)要求用户客户端在一段时间内将您的页面缓存在本地。或者您可以在HTML标记中放置相关的元标记。有很多可能的方法来实现这一点。 - Arthur Halma
@Adam184 谷歌可能会在多个网站之间共享样式表,但他们已经决定对某些网站进行内联处理,以减少请求的数量并加快页面加载速度。 - Andy Davies
@AndyDavies 谢谢 :) 谷歌的一些做法似乎不太规范,比如大约一个月前,他们的主要谷歌搜索页面使用了三个<table>标签来制作单个搜索栏。我不确定他们是想捣蛋还是真的有原因哈哈。而在某些页面上,他们将所有<head>标签的内容放在<body>标签中...但我已经决定...谁在乎呢?!哈哈 - user1631995
他们不断地进行实验。当然,对他们和其他大型网站有效的优化措施未必适用于其他所有人。 - Andy Davies

1

缓存是针对单个URL的资源,而不是针对整个网站。基本上,所有类型的资源,如HTML文档、图像、样式表、JavaScript代码、纯文本等都可以被缓存。因此,作为一个实体的网站不会被缓存,也不会有“整个页面”(HTML文档+其中使用的图像+引用的样式表+...)被缓存。但是,每个组件都可以在其自己的URL下进行缓存。

谷歌使用嵌入式style元素来处理一些非常短的样式表,可能是因为他们认为这比使用外部CSS文件更有效。HTML文档可能已经被缓存,但即使它没有被缓存,他们的方法也比使用外部样式表快一点,因为后者可能会引起HTTP开销。

但是对于您在网站的不同页面上使用的任何复杂CSS代码,外部CSS文件更有效。它将在用户首次访问您的网站时加载(带有小的HTTP开销),但当用户在其中移动时,浏览器将在其自己的缓存中拥有CSS代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接