元素是否被缓存?

时间:2009-05-28 15:50:47

标签: html performance caching

当我使用Privoxy检查我的浏览器从一个站点下载的内容时,似乎构成页面的所有元素(CSS,JS,图标等)每次都被重载,即。浏览器不会缓存它们(抱歉,新用户不允许包含URL):

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <TITLE>My Site</TITLE>
    <meta name="keywords" lang="fr" content="whatever">
    <meta name="Description" lang="fr" content="whatever">

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta name="Category" content="Internet"> 
    <meta name="revisit-after" content="2 days">
    <meta name="author" content="webmaster@example.com">
    <meta name="identifier-URL" content="http://www.example.com">
    <meta name="robots" content="index, follow">
    <meta name="classification" content="Internet">
    <meta name="distribution" content="global">

    <meta name="geography" content="Paris">
    <meta name='language' content='fr'><meta http-equiv='content-language' content='fr'><meta name='rating' content='General'>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="alternate" type="application/rss+xml" title="My RSS" href="http://www.example.com/rss.php" />


    <link rel="shortcut icon" href="favicon.ico">
    <link rel="icon" href="animated_favicon1.gif" type="image/gif">

    <link rel="stylesheet" href="miseenforme.css" type="text/css">
    <link rel="stylesheet" href="css/screen2009.css" type="text/css">
    <!--[if lte IE 6]>
    <link rel="stylesheet" href="css/screen2009-ie6.css" type="text/css">
    <![endif]-->

    <style type="text/css">@import url(jscalendar-1.0/calendar-blue.css);</style>
    <script type="text/javascript" src="jscalendar-1.0/calendar.js"></script>

    <script type="text/javascript" src="jscalendar-1.0/lang/calendar-fr.js"></script>
    <script type="text/javascript" src="jscalendar-1.0/calendar-setup.js"></script>

    <script type="text/javascript" src="jquery-1.2.6.pack.js"></script>
    <script type="text/javascript" src="jquery.scrollTo-min.js"></script>
    <script type="text/javascript" src="jquery.autogrow.js"></script>
    <script type="text/javascript" src="fonctionsjs.js?maj=v1"></script>
</head>

事实上,我在这个HTML标题中没有看到任何与缓存相关的指令。

有人可以确认浏览器(IE,Firefox,Chrome)除非在HTML标题中被告知,否则不会缓存任何内容吗?

我们是否需要配置浏览器以强制它们缓存元素?

谢谢。

5 个答案:

答案 0 :(得分:1)

简短版本:请勿更改浏览器,发送与缓存相关的HTTP标头*信息。

长版本:如果您没有明确告诉浏览器什么以及如何缓存,您可以自由选择。这样的设置是可配置的,并且在用户和浏览器之间变化很大,但通常你可以期望浏览器积极地缓存图像,js和css,但不是html(这非常粗糙,只是我的经验)。你依靠浏览器来解决这个问题是不合理的,如果你完全关心你需要明确地告诉他们,你还需要用响应头而不是元标记来做这个,因为元标记根本就没有得到尊重。

较长版本的较短版本:缓存复杂。我建议你谷歌为你选择的语言平台提供一个教程。


* html head标签的内容,HTTP标头的内容

答案 1 :(得分:1)

你确定它们没有被缓存吗?如果您的服务器没有为静态元素输出缓存控制头,浏览器仍会向服务器发出每个元素的HTTP请求(带有缓存文件的时间戳)。然后,服务器应以304状态响应,而不是修改。因此,文件本身不会再次传输,但这个请求响应可能正是您在Privoxy中看到的。

要保存请求,您必须配置服务器以设置缓存控制标头。但是,请注意,服务器上的更改可能不会反映在客户端上,因此您需要在更改它们时重命名css / static文件,以确保所有客户端都使用最新版本。

答案 2 :(得分:0)

缓存(缺少服务器配置或其他显式指令)通常是许多项目的浏览器设置。如果您没有足够大的缓存设置,或者您禁用了缓存,或者您的浏览器不确定它是同一个文件,或者是否有其他任何可能,它将重新下载这些项目。

您可以设置一些服务器控件。如果您告诉我们您正在运行的服务器,您可能会得到更好的答案......

最后,您可以查看http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.htmlhttp://www.web-caching.com/mnot_tutorial/how.html以获取更多信息。


基于your reply(我猜这是你的新名字......)你想看看你的Apache设置。我从未使用过Apache,所以我不知道从哪里开始......

您还希望查看我和其他人链接的一些文章。这不是一个简单的话题。 One article已被关联了几次。 (提示提示)

不是PHP程序员我不是100%肯定这一点,但我愿意打赌PHP有办法覆盖服务器的缓存头设置。可能值得在这里或在php.net上查看。

答案 3 :(得分:0)

我认为首先要检查的是 - 您的浏览器是否禁用了缓存?

AFAIK,浏览器会缓存大多数页面元素,除非服务器响应中的浏览器设置或HTTP标头禁用此缓存。

第二件事是在输出中插入与缓存相关的标题,以便明确指示浏览器缓存所有可用信息(在设定的时间段内)。

关于缓存主题的

Here's an excellent tutorial有助于消除对浏览器缓存的确切运作方式的许多误解。

答案 4 :(得分:0)

使用YSlow确定应该采取哪些措施来提高页面加载性能。它还告诉您应该如何最大化客户端缓存(即在浏览器中)。